Python 使用 TLSv1.2 请求模块,即使我指定的是 TLSv1.1
Python requests module using TLSv1.2 even though I am specifying TLSv1.1
我们的支付处理伙伴暂时只能支持TLSv1.1。现在不能切换处理器。
在 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 的 skint 文档,但我找不到任何可以表明为什么我的客户使用 TLSv1.2 而不是 TLSv1.1 的内容,就像我告诉它的那样。
解决方案是使用s.get(挂载了HTTPAdapter的Session)而不是requests.get。
我们的支付处理伙伴暂时只能支持TLSv1.1。现在不能切换处理器。
在 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 的 skint 文档,但我找不到任何可以表明为什么我的客户使用 TLSv1.2 而不是 TLSv1.1 的内容,就像我告诉它的那样。
解决方案是使用s.get(挂载了HTTPAdapter的Session)而不是requests.get。