2014-11-04 18 views
5

Sto usando la libreria di richieste per python e ho un piccolo problema: mi sto collegando a una API di riposo e, in pochi giorni, questo servizio eliminerà le connessioni SSL, quindi lo farò solo in grado di connettersi tramite TLS.SSL e TLS in richieste Python

Qualcuno sa se le richieste consentono la connessione TLS e come abilitarlo?

+0

qual è la tua versione di Python? Questa [SO Domanda e risposta] (http://stackoverflow.com/questions/18578439/using-requests-with-tls-doesnt-give-sni-support) potrebbe darti alcuni spunti. – Anzel

+1

... e quale libreria ssl in quale versione stai usando? –

risposta

6

Richieste utilizza la libreria standard Python ssl modulo sotto il cofano - questo supporta varie versioni di SSL e TLS. È possibile indicare alle richieste di utilizzare un protocollo specifico (come TLSv1) creando uno HTTPAdapter che personalizza l'istanza di PoolManager che viene creata.

Ho dovuto fare qualcosa del genere, ma è stato morso dal fatto che stavamo andando anche tramite un proxy - in questo caso il metodo init_poolmanager non viene chiamato, perché utilizza un ProxyManager invece. Ho usato questo:

class ForceTLSV1Adapter(adapters.HTTPAdapter): 
    """Require TLSv1 for the connection""" 
    def init_poolmanager(self, connections, maxsize, block=False): 
     # This method gets called when there's no proxy. 
     self.poolmanager = poolmanager.PoolManager(
      num_pools=connections, 
      maxsize=maxsize, 
      block=block, 
      ssl_version=ssl.PROTOCOL_TLSv1, 
     ) 

    def proxy_manager_for(self, proxy, **proxy_kwargs): 
     # This method is called when there is a proxy. 
     proxy_kwargs['ssl_version'] = ssl.PROTOCOL_TLSv1 
     return super(ForceTLSV1Adapter, self).proxy_manager_for(proxy, **proxy_kwargs) 
Problemi correlati