python请求:Monkeypatching HTTPConnection设置套接字选项

时间:2018-11-26 19:43:07

标签: python python-2.7 python-requests

我正在尝试在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

0 个答案:

没有答案