使用keep-alive加速Python请求

98 投票
1 回答
106354 浏览
提问于 2025-04-18 16:49

在HTTP协议中,你可以通过一个连接发送多个请求,这个连接叫做“保持活动”(keep-alive)。这样,你就可以一次性从服务器接收所有的响应,这样会大大加快整个过程。请问在Python的requests库中,有没有办法做到这一点?或者有没有其他方法可以用requests库来加速这个过程呢?

1 个回答

175

是的,确实有办法。你可以使用requests.Session,这样默认情况下就会保持连接不断开。

我想我应该给个简单的例子:

import logging
import requests

logging.basicConfig(level=logging.DEBUG)
s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
s.get('http://httpbin.org/cookies/set/anothercookie/123456789')
r = s.get("http://httpbin.org/cookies")
print(r.text)

你会注意到这些日志信息会出现

INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): httpbin.org
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies/set/sessioncookie/123456789 HTTP/1.1" 302 223
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies HTTP/1.1" 200 55
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies/set/anothercookie/123456789 HTTP/1.1" 302 223
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies HTTP/1.1" 200 90
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies HTTP/1.1" 200 90

如果你等一会儿,然后重复最后一次的get调用

INFO:requests.packages.urllib3.connectionpool:Resetting dropped connection: httpbin.org
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies HTTP/1.1" 200 90

注意,它会重置掉线的连接,也就是说,它会重新建立与服务器的连接,以便发出新的请求。

撰写回答