Error ini kadang terjadi saat kita menggunakan pandas untuk membaca html dari sebuah url, misalnya seperti ini:
import pandas as pd
dfs = pd.read_html(url)
df = dfs[0]
Nah, kadang ini menyebabkan error seperti ini:
---------------------------------------------------------------------------
SSLCertVerificationError Traceback (most recent call last)
/usr/lib/python3.10/urllib/request.py in do_open(self, http_class, req, **http_conn_args)
1347 try:
-> 1348 h.request(req.get_method(), req.selector, req.data, headers,
1349 encode_chunked=req.has_header('Transfer-encoding'))
22 frames
SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1007)
During handling of the above exception, another exception occurred:
URLError Traceback (most recent call last)
/usr/lib/python3.10/urllib/request.py in do_open(self, http_class, req, **http_conn_args)
1349 encode_chunked=req.has_header('Transfer-encoding'))
1350 except OSError as err: # timeout error
-> 1351 raise URLError(err)
1352 r = h.getresponse()
1353 except:
URLError:
Error SSLCertVerificationError
muncul ketika Python tidak dapat memverifikasi sertifikat SSL dari server saat melakukan permintaan HTTPS. Ini sering kali terjadi ketika sertifikat SSL yang digunakan oleh server tidak dapat diverifikasi oleh Python, yang mungkin disebabkan oleh beberapa masalah yang mungkin terjadi. Berikut adalah penjelasan detil dan beberapa penyebab umum:
- Tidak Dapat Menemukan Sertifikat Otoritas Sertifikat (CA):
- Python menggunakan daftar Sertifikat Otoritas Sertifikat (CA) lokal untuk memverifikasi sertifikat SSL server. Jika tidak dapat menemukan atau memverifikasi sertifikat otoritas sertifikat yang diperlukan, maka kesalahan ini dapat terjadi.
- Solusi: Pastikan bahwa sistem Python Anda memiliki sertifikat otoritas sertifikat yang diperlukan. Anda dapat memperbarui sertifikat otoritas sertifikat dengan menginstal paket sertifikat CA yang diperlukan.
- Sertifikat SSL Server Tidak Valid atau Kadaluarsa:
- Sertifikat SSL yang digunakan oleh server mungkin tidak valid atau telah kedaluwarsa.
- Solusi: Periksa validitas dan masa berlaku sertifikat SSL server. Jika sertifikat tidak valid, hubungi administrator server atau penyedia sertifikat SSL untuk memperbarui atau mendapatkan sertifikat yang valid.
- Masalah Konfigurasi SSL pada Server:
- Konfigurasi SSL pada server mungkin tidak benar atau tidak lengkap.
- Solusi: Periksa konfigurasi SSL pada server untuk memastikan bahwa semuanya dikonfigurasi dengan benar.
- Penggunaan IP Address Daripada Nama Domain:
- Jika Anda menggunakan alamat IP server daripada nama domain, sertifikat SSL mungkin terkait dengan nama domain dan bukan IP.
- Solusi: Gunakan nama domain server daripada alamat IP.
- Nonaktifkan Verifikasi SSL (Tidak Disarankan):
- Tindakan ini sangat tidak aman karena memungkinkan sambungan ke server tanpa verifikasi sertifikat SSL. Sebaiknya hindari tindakan ini kecuali untuk keperluan pengembangan atau debugging.
- Solusi (Hati-hati): Nonaktifkan verifikasi SSL, namun pastikan untuk memahami risikonya dan hanya gunakan di lingkungan pengembangan.
Solusi
def get_data():
response = requests.get(url, verify=False) # handle Error -> SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1007)
# Jika request berhasil, baru load HTML pake pandas
if response.ok:
html_content = response.text
dfs = pd.read_html(html_content)
df = dfs[0]
else:
print("Eror")
return df