在python-requests模块

时间:2016-07-02 12:58:42

标签: python http python-requests keep-alive

我对python-requests模块有疑问。根据文件

  

感谢urllib3,keep-alive在会话中是100%自动的!您在会话中发出的任何请求都将自动重用相应的连接!

我的示例代码如下所示:

def make_double_get_request():
    response = requests.get(url=API_URL, headers=headers, timeout=10)
    print response.text
    response = requests.get(url=API_URL, headers=headers, timeout=10)
    print response.text

但我收到的日志告诉我,每次请求都会启动新的HTTP连接:

INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): url
DEBUG:requests.packages.urllib3.connectionpool:"GET url HTTP/1.1" 200 None
response text goes here
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): url
DEBUG:requests.packages.urllib3.connectionpool:"GET url HTTP/1.1" 200 None
response text goes here

我做错了吗?通过使用wireshark查看数据包,似乎它们实际上具有保持活动集。

1 个答案:

答案 0 :(得分:2)

使用Session() instance

def make_double_get_request():
    session = requests.Session()
    response = session.get(url=API_URL, headers=headers, timeout=10)
    print response.text
    response = session.get(url=API_URL, headers=headers, timeout=10)
    print response.text

requests顶级HTTP方法函数是一种便利API,每次都会创建一个新的Session对象,从而阻止重用连接。

来自文档:

  

Session对象允许您跨请求保留某些参数。它还会在从Session实例发出的所有请求中保留cookie,并将使用urllib3的连接池。