我们的付款处理合作伙伴暂时只能支持TLSv1.1。切换处理器现在不是一种选择。即使我指定TLSv1.1,Python使用TLSv1.2请求模块
在Python 2.7.10,我有一个脚本,从我开发的Web服务器请求一个GET,但在运行时,它使用TLSv1.2工作,而不是像TLSv1.1我告诉它来。
import requests
from requests.packages.urllib3.poolmanager import PoolManager
import ssl
class MyAdapter(requests.adapters.HTTPAdapter):
def init_poolmanager(self, connections, maxsize, block=False):
self.poolmanager = PoolManager(
num_pools=connections,
maxsize=maxsize,
block=block,
ssl_version=ssl.PROTOCOL_TLSv1_1,
)
print("poolmanager set")
def do_it():
with requests.Session() as s:
s.mount('https://', MyAdapter())
url = 'https://my.server.com/api/3.0/order/?page=1&limit=10'
response = requests.get(url, verify=True)
print("status code: %r" % response.status_code)
if __name__ == '__main__':
print do_it()
输出是:
poolmanager set
status code: 200
我nginx的访问日志,但是,说,该协议所用的是TLSv1.2工作:
127.0.0.1 - [15/Dec/2015:13:38:19 -0600] TLSv1.2/ECDHE-RSA-AES128-GCM-SHA256 "GET /api/3.0/order/?page=1&limit=10 HTTP/1.1" 200 176 "-" "python-requests/2.9.0"
我已经倒在围绕清贫文档使用请求库实现和安装HTTPAdapter,而且我无法找到任何可以说明我的客户端为什么要讲TLSv1.2而不是TLSv1.1的内容,就像我正在讲的那样。
我认为ssl_verson不正确。应该是ssl_version? – rfkortekaas
@rfkortekaas感谢您的支持。我确信那会是,但纠正这个错字没有任何区别。我目前看到使用直接urllib2取得了一些成功,但仍然需要解决问题。我现在会更新这个问题。 – Rjak
您还需要s.get来使用会话对象和HTTPadapter – rfkortekaas