2014-11-04 14 views
5

Używam biblioteki żądań dla Pythona, i mam mały problem: łączę się z api ape i za kilka dni ta usługa usunie połączenia SSL, więc ja można łączyć się tylko przez TLS.SSL i TLS w pytaniach Pythona

Czy ktoś wie, czy żądanie zezwala na połączenie TLS i jak je włączyć?

+0

jaka jest twoja wersja Pythona? To [Pytanie i odpowiedź] (http://stackoverflow.com/questions/18578439/using-requests-with-tls-doesnt-give-sni-support) może dać ci pewien wgląd. – Anzel

+1

... i jakiej biblioteki ssl w jakiej wersji używasz? –

Odpowiedz

6

Żądania używa modułu biblioteki standardowej Python ssl pod maską - obsługa różnych wersji SSL i TLS. Można żądać żądań użycia określonego protokołu (takiego jak TLSv1), tworząc HTTPAdapter dostosowujący instancję PoolManager, która zostanie utworzona.

Musiałem zrobić coś takiego, ale zostałem ugryziony przez fakt, że również przechodzimy przez proxy - w tym przypadku metoda init_poolmanager nie jest wywoływana, ponieważ używa zamiast tego ProxyManager. Użyłem tego:

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) 
Powiązane problemy