【问题标题】:Python requests speed up using keep-alivePython 请求使用 keep-alive 加速
【发布时间】:2014-10-04 01:37:03
【问题描述】:

在 HTTP 协议中,您可以使用 keep-alive 在一个套接字中发送多个请求,然后立即接收来自服务器的响应,这样可以显着加快整个过程。有没有办法在 python 请求库中做到这一点?或者有没有其他方法可以使用 requests 库来加快速度?

【问题讨论】:

  • 更进一步,也可以通过管道传输 http 请求!

标签: python http python-requests python-sockets


【解决方案1】:

是的,有。使用requests.Sessionit will do keep-alive by default

我想我应该包括一个简单的例子:

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

请注意,它会重置断开的连接,即重新建立与服务器的连接以发出新请求。

【讨论】:

  • 我认为requests 保持会话处于活动状态,但实际上通常情况并非如此,明确定义会话有很大帮助。
  • 代理是否与会话保持活动一起使用?我注意到它在第一次连接后重置了断开的连接
  • 这取决于代理的配置方式。代理可能被配置为忽略 keep-alive,因为它可能不想跟踪数千个这样的持久连接,或者它可能只是默默地丢弃它们。
  • @phanny requests.get 没有自动保持活动状态;使用requests.Session 在这里回答,将verify 设置为True;例如session = requests.Session(verify=True),并使用session.get(...)
  • 感谢@metatoaster 提供的信息。顺便说一句,我认为语法有一点更正。 session = requests.Session(verify=True) 向我抛出了错误 TypeError: __init__() got an unexpected keyword argument 'verify'session = requests.Session() 然后session.verify = True 为我工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 2012-06-09
  • 2023-03-07
相关资源
最近更新 更多