我正在尝试在Python应用程序中启用TCP Keepalive,并且在设置sockopts时遇到问题。我为此使用了requests
软件包。
我尝试过的方法是在this response to a very similar question中提出的。用户说:
requests
使用urllib3
,后者使用标准库的http.client
(或对于2.x来说是httplib
),它调用socket.create_connection
,所有位置都不存在钩东西。
这里是此处给出的代码段的复制品,适用于python 2:
orig_connect = httplib.HTTPConnection.connect
def monkey_connect(self):
orig_connect(self)
self.sock.setsockopt(…)
# raise Exception
httplib.HTTPConnection.connect = monkey_connect
import requests
response = requests.get('http://www.google.com')
print response.status_code
请求成功。接下来,要检查Monkeypatch是否确实在做某事,我添加了一个异常,该异常在上面的代码片段中已注释掉。我发现如果尝试发出请求,它将调用HTTPConnection
,并且会引发异常。但是不,我只收到200的回复。
因为这个原因,我的感觉是请求并未真正使用HTTPConnection
类,正如我链接到的答案中所述。不幸的是,在研究了一段时间的代码之后,我无法从一个简单的get
请求返回到套接字层(我完全不熟悉该程序包的内部工作原理)。
有人对我如何以这种方式设置套接字选项有任何见解吗?我正在使用的代码库使用requests.get(...)
,所以我认为我不能简单地创建一个Session
并在其上安装套接字适配器。
版本(不幸的是,我对此没有控制权)如下:
python 2.7.14
requests
2.13.0
urllib3
1.20.0