2014-11-04 8 views
5

Ich benutze Anfragen Bibliothek für Python, und ich habe ein kleines Problem: Ich bin eine Verbindung zu einem Rest API und in wenigen Tagen wird dieser Service SSL-Verbindungen löschen, also werde ich kann nur über TLS verbinden.SSL und TLS in Python-Anfragen

Weiß jemand, ob Anfragen TLS-Verbindung erlaubt und wie es aktiviert?

+0

Was ist Ihre Version von Python? Diese [SO Frage & Antwort] (http://stackoverflow.com/questions/18578439/using-requests-with-tls-doesnt-give-sni-support) kann Ihnen einige Einsichten geben. – Anzel

+1

... und welche ssl Bibliothek in welcher Version verwenden Sie? –

Antwort

6

Anfragen verwendet die Python-Standardbibliothek ssl Modul unter der Haube - das unterstützt verschiedene Versionen von SSL und TLS. Sie können Anforderungen zur Verwendung eines bestimmten Protokolls (wie TLSv1) mitteilen, indem Sie eine HTTPAdapter erstellen, die die PoolManager-Instanz anpasst, die erstellt wird.

Ich musste so etwas tun, aber wurde von der Tatsache gebissen, dass wir auch über einen Proxy gingen - in diesem Fall wird die init_poolmanager Methode nicht aufgerufen, weil sie stattdessen eine ProxyManager verwendet. Ich benutzte dieses:

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) 
Verwandte Themen