Python请求使用keep-alive加速

Pau*_*low 52 python http python-sockets python-requests

在HTTP协议中,您可以使用keep-alive在一个套接字中发送许多请求,然后立即从服务器接收响应,这样可以显着加快整个过程.有没有办法在python请求lib中执行此操作?或者有没有其他方法可以使用请求lib加快速度?

met*_*ter 94

就在这里.使用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)
Run Code Online (Sandbox Code Playgroud)

您会注意到这些日志消息发生

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
Run Code Online (Sandbox Code Playgroud)

如果你等一会儿,重复最后一次get通话

INFO:requests.packages.urllib3.connectionpool:Resetting dropped connection: httpbin.org
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies HTTP/1.1" 200 90
Run Code Online (Sandbox Code Playgroud)

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

  • @phanny`requests.get` 没有自动保持活动状态;使用此处回答的“requests.Session”,并将“verify”设置为“True”;例如`session = requests.Session(verify=True)`,并使用`session.get(...)` (3认同)
  • 我假设“请求”使会话保持活动状态,但实际上情况通常并非如此,并且显式定义会话有很大帮助。 (2认同)
  • 感谢您提供@metatoaster信息。顺便说一句,我认为语法有一些更正。会话=请求。会话(验证=正确)抛出错误我TypeError:__init __()得到了意外的关键字参数'验证'。`session = requests.Session()`,然后`session.verify = True`对我有用。 (2认同)