Dari dokumentasi :
requests
juga dapat mengabaikan memverifikasi sertifikat SSL jika Anda menetapkan
verify
ke False.
>>> requests.get('https://kennethreitz.com', verify=False)
<Response [200]>
Jika Anda menggunakan modul pihak ketiga dan ingin menonaktifkan pemeriksaan, inilah manajer konteks yang menambal monyet requests
dan mengubahnya sehingga verify=False
merupakan default dan menekan peringatan.
import warnings
import contextlib
import requests
from urllib3.exceptions import InsecureRequestWarning
old_merge_environment_settings = requests.Session.merge_environment_settings
@contextlib.contextmanager
def no_ssl_verification():
opened_adapters = set()
def merge_environment_settings(self, url, proxies, stream, verify, cert):
# Verification happens only once per connection so we need to close
# all the opened adapters once we're done. Otherwise, the effects of
# verify=False persist beyond the end of this context manager.
opened_adapters.add(self.get_adapter(url))
settings = old_merge_environment_settings(self, url, proxies, stream, verify, cert)
settings['verify'] = False
return settings
requests.Session.merge_environment_settings = merge_environment_settings
try:
with warnings.catch_warnings():
warnings.simplefilter('ignore', InsecureRequestWarning)
yield
finally:
requests.Session.merge_environment_settings = old_merge_environment_settings
for adapter in opened_adapters:
try:
adapter.close()
except:
pass
Begini cara Anda menggunakannya:
with no_ssl_verification():
requests.get('https://wrong.host.badssl.com/')
print('It works')
requests.get('https://wrong.host.badssl.com/', verify=True)
print('Even if you try to force it to')
requests.get('https://wrong.host.badssl.com/', verify=False)
print('It resets back')
session = requests.Session()
session.verify = True
with no_ssl_verification():
session.get('https://wrong.host.badssl.com/', verify=True)
print('Works even here')
try:
requests.get('https://wrong.host.badssl.com/')
except requests.exceptions.SSLError:
print('It breaks')
try:
session.get('https://wrong.host.badssl.com/')
except requests.exceptions.SSLError:
print('It breaks here again')
Perhatikan bahwa kode ini menutup semua adapter terbuka yang menangani permintaan yang ditambal setelah Anda meninggalkan manajer konteks. Ini karena permintaan mempertahankan kumpulan koneksi per sesi dan validasi sertifikat hanya terjadi sekali per koneksi sehingga hal-hal tak terduga seperti ini akan terjadi:
>>> import requests
>>> session = requests.Session()
>>> session.get('https://wrong.host.badssl.com/', verify=False)
/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py:857: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)
<Response [200]>
>>> session.get('https://wrong.host.badssl.com/', verify=True)
/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py:857: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)
<Response [200]>
requests
dan memilikiverify
standar untukFalse
.requests.packages.urllib3.disable_warnings()
from urllib3.exceptions import InsecureRequestWarning
lalurequests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
Gunakan
requests.packages.urllib3.disable_warnings()
danverify=False
padarequests
metode.sumber
verify=False
harus tetap hadir. Tnx.from urllib3.exceptions import InsecureRequestWarning
lalurequests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)
. Ini berfungsi karena memastikanurllib3.exceptions.InsecureRequestWarning
yang tepat digunakan olehrequests
.Untuk menambahkan jawaban Blender , Anda dapat menonaktifkan SSL untuk semua permintaan menggunakan
Session.verify = False
Perhatikan bahwa
urllib3
, (yang Digunakan oleh Permintaan), sangat tidak menyarankan untuk membuat permintaan HTTPS yang tidak terverifikasi dan akan memunculkanInsecureRequestWarning
.sumber
Juga dapat dilakukan dari variabel lingkungan:
sumber
export REQUESTS_CA_BUNDLE='your-ca.pem'
os.environ['REQUESTS_CA_BUNDLE'] = 'FiddlerRootCertificate_Base64_Encoded_X.509.cer.pem' # your-ca.pem
berfungsi untuk Python 3.8.3 saat menggunakan google-cloud-bigquery 1.24.0 dan BigQuery Client Lib untuk PythonJika Anda ingin mengirim permintaan posting persis dengan verifikasi = opsi Salah, cara tercepat adalah dengan menggunakan kode ini:
sumber