Kaip išjungti „Python“ užklausų saugos sertifikato patvirtinimą

Aš naudoju

 import requests requests.post(url='https://foo.com', data={'bar':'baz'}) 

bet aš gaunu užklausą.exceptions.SSLError. Svetainėje yra pasibaigęs sertifikatas, tačiau neskelbiu konfidencialių duomenų, todėl man nesvarbu. Manau, kad yra argumentas, pavyzdžiui, „verifiy = False“, kurį galėčiau naudoti, bet aš negaliu to rasti.

100
16 марта '13 в 8:38 2013-03-16 08:38 Paulius Draperis paklausė kovo 16 d. 13:38 2013-03-16 08:38
@ 4 atsakymai

dokumentacijos :

Prašymai taip pat gali ignoruoti SSL patikros patikrinimus, jei nustatėte „False“.

 >>> requests.get('https://kennethreitz.com', verify=False) <Response [200]> 

Jei naudojate trečiosios šalies modulį ir norite išjungti patikrinimus, kontekstinis valdytojas čia, kurį beždžionė ištaiso ir pakeičia jį taip, kad verify=False yra numatytasis ir panaikina įspėjimą.

 import warnings import contextlib import requests from urllib3.exceptions import InsecureRequestWarning try: from functools import partialmethod except ImportError: # Python 2 fallback: https://gist.github.com/carymrobbins/8940382 from functools import partial class partialmethod(partial): def __get__(self, instance, owner): if instance is None: return self return partial(self.func, instance, *(self.args or ()), **(self.keywords or {})) @contextlib.contextmanager def no_ssl_verification(session=requests.Session): old_request = session.request session.request = partialmethod(old_request, verify=False) with warnings.catch_warnings(): warnings.simplefilter('ignore', InsecureRequestWarning) yield session.request = old_request 

Ir pavyzdys, kaip jį naudoti:

 with no_ssl_verification(): requests.get('https://93.184.216.3/') print('It works') requests.get('https://93.184.216.3/', verify=False) print('It resets back') try: requests.get('https://93.184.216.3/') except requests.exceptions.SSLError: print('It breaks') 
187
16 марта '13 в 8:40 2013-03-16 08:40 atsakymas pateikiamas Blenderio kovo 16 d. 13 val. 8:40 2013-03-16 08:40

Naudokite request.packages.urllib3.disable_warnings ().

 import requests requests.packages.urllib3.disable_warnings() requests.post(url='https://foo.com', data={'bar':'baz'}) 
47
29 авг. atsakymą pateikė efrenfuentes 29 rug . 2015-08-29 06:20 '15 at 6:20 2015-08-29 06:20

Jei norite pridėti „ Blender“ atsakymą , galite išjungti SSL visoms užklausoms naudodami Session.verify = False

 import requests session = requests.Session() session.verify = False session.post(url='https://foo.com', data={'bar':'baz'}) 

Atkreipkite dėmesį, kad urllib3 (kuris naudoja užklausas) stipriai užkerta kelią urllib3 HTTPS užklausų vykdymui ir padidins „ InsecureRequestWarning .

5
03 мая '18 в 18:55 2018-05-03 18:55 Atsakymą pateikė Steven Vascellaro gegužės 18 d. 18, 18:55 2018-05-03 18:55

Jei norite tiksliai išsiųsti užklausą po parametro patikrinimo = False, greičiausias būdas yra naudoti šį kodą:

 import requests requests.api.request('post', url, data={'bar':'baz'}, json=None, verify=False) 
2
09 марта '16 в 13:26 2016-03-09 13:26 atsakymas pateikiamas Ruslan Khyurri kovo 09–16 d. 13:26 2016-03-09 13:26

Kiti klausimai apie „ žymes arba Ask a Question