2014-11-04 25 views
5

Tôi đang sử dụng thư viện yêu cầu cho python và tôi gặp sự cố nhỏ: Tôi đang kết nối với api còn lại và trong vài ngày, dịch vụ này sẽ xóa kết nối SSL, vì vậy tôi sẽ chỉ có thể kết nối thông qua TLS.SSL và TLS trong yêu cầu Python

Có ai biết nếu yêu cầu cho phép kết nối TLS và cách bật tính năng này?

+0

phiên bản Python của bạn là gì? [SO Hỏi & Đáp] (http://stackoverflow.com/questions/18578439/using-requests-with-tls-doesnt-give-sni-support) có thể cung cấp cho bạn một số thông tin chi tiết. – Anzel

+1

… và thư viện ssl nào bạn đang sử dụng phiên bản nào? –

Trả lời

6

Yêu cầu sử dụng thư viện tiêu chuẩn Python ssl mô-đun dưới mui xe - điều này hỗ trợ các phiên bản SSL và TLS khác nhau. Bạn có thể yêu cầu sử dụng giao thức cụ thể (như TLSv1) bằng cách tạo một HTTPAdapter tùy chỉnh cá thể PoolManager được tạo.

Tôi phải làm một cái gì đó như thế này, nhưng bị cắn bởi thực tế rằng chúng tôi cũng đã đi qua một proxy - trong trường hợp đó phương pháp init_poolmanager không được gọi, bởi vì nó sử dụng một ProxyManager thay thế. Tôi đã sử dụng điều này:

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) 
Các vấn đề liên quan