2013-03-16 7 views

risposta

146

Da the documentation:

Le richieste possono anche ignorare la verifica della certficate SSL se si imposta verify False.

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

Se si utilizza un modulo di terze parti e si desidera disattivare i controlli, ecco un gestore di contesto che le patch scimmia requests e cambia in modo che verify=False è l'impostazione predefinita e sopprime l'avviso.

import warnings 
import requests 
import contextlib 

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(): 
    old_request = requests.Session.request 
    requests.Session.request = partialmethod(old_request, verify=False) 

    warnings.filterwarnings('ignore', 'Unverified HTTPS request') 
    yield 
    warnings.resetwarnings() 

    requests.Session.request = old_request 

e un esempio di come usarlo:

with no_ssl_verification(): 
    requests.get('https://93.184.216.3/') 
    print('It works') 

try: 
    requests.get('https://93.184.216.3/') 
except requests.exceptions.SSLError: 
    print('It broke') 
+6

Grazie, questo funziona se si dispone di alcune richieste chiamate all'interno del proprio codice, ma immagina di voler disabilitare questo in una terza libreria parzialmente che usa le richieste, ... sarebbe impossibile risolvere la lib di terze parti come questa. – sorin

+6

@sorin: esegui semplicemente la 'richiesta' di patch della scimmia e avanza' verify' su 'False'. – Blender

+2

Come si sopprime il messaggio di avvertenza che viene ancora stampato? – Michael

37

Utilizzare requests.packages.urllib3.disable_warnings().

import requests 

requests.packages.urllib3.disable_warnings() 
requests.post(url='https://foo.com', data={'bar':'baz'}) 
+6

La tua risposta è utile quando vuoi eliminare Avvisi come "Richiesta HTTPS non verificata in corso". Ma '' verify = False'' deve essere presente comunque. Tnx. – Lufa

+1

E per evitare di nascondere tutti gli avvisi: 'da urllib3.exceptions import InsecureRequestWarning' quindi' requests.packages.urllib3.disable_warnings (category = InsecureRequestWarning) ' –

3

Se si desidera inviare esattamente inviare richiesta con verifica = False opzione, modo più veloce è quello di utilizzare questo codice:

import requests 

requests.api.request('post', url, data={'bar':'baz'}, json=None, verify=False) 
Problemi correlati