Python-Requests(> = 1.*):如何禁用keep-alive?

Ace*_*mad 14 python web-crawler web python-requests

我正在尝试使用Requests模块编写一个简单的Web爬虫程序,我想知道如何禁用它的-default- keep-alive feauture.

我试过用:

s = requests.session()
s.config['keep_alive'] = False
Run Code Online (Sandbox Code Playgroud)

但是,我得到一个错误,说明会话对象没有属性'config',我认为它已经改变了新版本,但我似乎无法在官方文档中找到如何做到这一点.

事实上,当我在特定网站上运行爬虫时,它最多只能获得五个页面,然后无限循环,所以我认为它与保持活动功能有关!

PS:是请求网络爬虫的好模块吗?有更适合的东西吗?

谢谢 !

nfa*_*zio 15

这有效

s = requests.session()
s.keep_alive = False
Run Code Online (Sandbox Code Playgroud)

在类似问题的评论中回答.

  • 至少在当前请求版本上不起作用-请求stll发送keep-alive标头 (2认同)
  • 不起作用。请求:2.21.0。AttributeError:“Session”对象没有属性“keep_alive” (2认同)

pra*_*een 6

我不确定,但是当您使用请求发送GET请求时,您是否可以尝试将{"Connection":"close"}作为HTTP标头传递.这将在服务器返回响应后立即关闭连接.

>>> headers = {"Connection": "close"}
>>> r = requests.get('https://example.xcom', headers=headers)
Run Code Online (Sandbox Code Playgroud)


Ily*_*kin 5

正如 @praveen 所建议的那样,我们希望使用HTTP/1.1标头来 Connection: close通知服务器应在响应完成后关闭连接。

RFC 2616中是这样描述的:

HTTP/1.1 为发送方定义了“关闭”连接选项,以表明连接将在响应完成后关闭。例如,

Connection: close
Run Code Online (Sandbox Code Playgroud)

请求或响应头字段中的 指示当前请求/响应完成后,连接不应被视为“持久”(第 8.1 节)。

不支持持久连接的 HTTP/1.1 应用程序必须在每条消息中包含“关闭”连接选项。