Aus der Dokumentation :
requests
Sie können die Überprüfung des SSL-Zertifikats auch ignorieren, wenn Sie verify
False festlegen
.
>>> requests.get('https://kennethreitz.com', verify=False)
<Response [200]>
Wenn Sie ein Modul eines Drittanbieters verwenden und die Überprüfungen deaktivieren möchten, finden Sie hier einen Kontextmanager, der Affen-Patches erstellt requests
und so ändert, dass dies verify=False
die Standardeinstellung ist und die Warnung unterdrückt.
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
So verwenden Sie es:
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')
Beachten Sie, dass dieser Code alle offenen Adapter schließt, die eine gepatchte Anforderung verarbeitet haben, sobald Sie den Kontextmanager verlassen. Dies liegt daran, dass Anforderungen einen Verbindungspool pro Sitzung verwalten und die Zertifikatsüberprüfung nur einmal pro Verbindung erfolgt, sodass unerwartete Ereignisse wie diese auftreten:
>>> 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
und habenverify
standardmäßig zuFalse
.requests.packages.urllib3.disable_warnings()
from urllib3.exceptions import InsecureRequestWarning
dannrequests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
Verwenden Sie
requests.packages.urllib3.disable_warnings()
undverify=False
aufrequests
Methoden.quelle
verify=False
muss ohnehin vorhanden sein. Tnx.from urllib3.exceptions import InsecureRequestWarning
dannrequests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)
. Dies funktioniert, weil es sicherstellt, dass esurllib3.exceptions.InsecureRequestWarning
genau das ist, das von verwendet wirdrequests
.Um die Antwort von Blender zu ergänzen , können Sie SSL für alle Anforderungen mit deaktivieren
Session.verify = False
Beachten Sie, dass
urllib3
(von Requests verwendet) nicht bestätigte HTTPS-Anfragen dringend empfohlen werden und eineInsecureRequestWarning
.quelle
Kann auch über die Umgebungsvariable erfolgen:
quelle
export REQUESTS_CA_BUNDLE='your-ca.pem'
os.environ['REQUESTS_CA_BUNDLE'] = 'FiddlerRootCertificate_Base64_Encoded_X.509.cer.pem' # your-ca.pem
funktioniert für Python 3.8.3, wenn Google-Cloud-Bigquery 1.24.0 und BigQuery Client Lib für Python verwendet werdenWenn Sie genau eine Post-Anfrage mit der Option verify = False senden möchten, verwenden Sie am schnellsten diesen Code:
quelle