较新版本的urllib3
(自1.8.3起,2014-06-23发布)支持设置套接字选项。
您可以从以下位置设置这些选项requests
(自 2.4.0 起,2014-08-29 发布)通过创建自定义适配器:
class HTTPAdapterWithSocketOptions(requests.adapters.HTTPAdapter):
def __init__(self, *args, **kwargs):
self.socket_options = kwargs.pop("socket_options", None)
super(HTTPAdapterWithSocketOptions, self).__init__(*args, **kwargs)
def init_poolmanager(self, *args, **kwargs):
if self.socket_options is not None:
kwargs["socket_options"] = self.socket_options
super(HTTPAdapterWithSocketOptions, self).init_poolmanager(*args, **kwargs)
然后您可以将此适配器安装到需要自定义套接字选项的会话(例如设置SO_KEEPALIVE
):
adapter = HTTPAdapterWithSocketOptions(socket_options=[(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)])
s = requests.session()
s.mount("http://", adapter)
s.mount("https://", adapter)