如何在Python Requests中限制仅使用TLS1.2连接(含POST/GET)
如何限制requests仅使用TLS 1.2进行POST/GET请求
没问题,这事儿其实很简单——只需要给requests的Session加个自定义适配器,强制它只用TLS 1.2建立连接就行,不管是POST还是GET请求都能这么配置。我帮你把你的POST代码改好,再给你GET请求的示例。
1. 先定义强制TLS 1.2的适配器
我们需要写一个自定义的HTTPAdapter,它会在初始化连接池的时候指定SSL版本为TLS 1.2,拒绝任何低于这个版本的连接:
import ssl import requests from requests.adapters import HTTPAdapter from urllib3.util.ssl_ import create_urllib3_context from urllib3.util.retry import Retry class TLS12Adapter(HTTPAdapter): def init_poolmanager(self, *args, **kwargs): # 强制使用TLS 1.2协议 context = create_urllib3_context(ssl_version=ssl.PROTOCOL_TLSv1_2) kwargs['ssl_context'] = context super().init_poolmanager(*args, **kwargs)
2. 修改你的POST重试会话
把这个适配器和重试逻辑结合,挂载到你的Session里,这样所有通过这个Session发送的POST请求都会强制用TLS 1.2:
def retry_session(retries, session=None, backoff_factor=0.3, status_forcelist=(500, 502, 503, 504)): session = session or requests.Session() # 配置重试规则 retry = Retry( total=retries, read=retries, connect=retries, backoff_factor=backoff_factor, status_forcelist=status_forcelist ) # 把重试逻辑和TLS 1.2强制规则合并到同一个适配器 tls_retry_adapter = TLS12Adapter(max_retries=retry) session.mount('https://', tls_retry_adapter) return session # POST请求使用示例 def send_post_request(url, payload): session = retry_session(retries=3) response = session.post(url, json=payload) response.raise_for_status() # 主动抛出HTTP错误 return response.json()
这样配置后,如果服务器不支持TLS 1.2,请求会直接抛出SSL相关错误,完全不会建立不符合要求的连接,刚好满足你们安全团队的要求。
3. GET请求的配置
GET请求的配置和POST完全一致,只要用这个配置好的retry_session发送请求就行,比如:
def send_get_request(url, query_params=None): session = retry_session(retries=3) response = session.get(url, params=query_params) response.raise_for_status() return response.json()
不管是GET还是POST,只要是通过这个Session发送的HTTPS请求,都会严格使用TLS 1.2协议,拒绝其他版本的连接。
额外提醒:如果你的请求是HTTP协议(非HTTPS),那TLS版本的配置就不会生效,但相信你们安全团队也会要求只发送HTTPS请求对吧?
内容的提问来源于stack exchange,提问作者Phil Baines
相关产品推荐
相关产品推荐

