如何在请求中定义HTTP协议版本?

时间:2015-07-30 15:35:28

标签: python python-3.x python-requests

import requests  
requests.get("http://www.sample.com")

如何修改发送请求的参数,如下所示:

“获取www.sample.com HTTP / 1.0”

“获取www.sample.com HTTP / 1.1”

3 个答案:

答案 0 :(得分:1)

请求不支持发送HTTP / 1.0消息。很难理解为什么需要这样做:HTTP / 1.1最初是在1999年6月发布的RFC 2616中指定的。因此,HTTP / 1.0已经过时超过16年了:现代工具在很大程度上不支持HTTP /再过1.0。

答案 1 :(得分:0)

尝试传递一个 User-Agent 字符串,如下所示:

import requests

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'}
URL = 'http://serveraddress'
page = requests.get(URL, headers=headers)
print(page.text)

背景:使用旧版 Shoutcast 流媒体音频服务器时,我收到以下错误:

requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine('ICY 200 OK\r\n'))

我也注意到 wget 尝试流式传输数据,即使给定了 -O 输出指令也是如此。

与 Chrome 中的开发者工具相比,我可以看到浏览器设置的多个请求标头,包括 User-Agent。我从 Chrome 复制了 User-Agent 值,并将其用作 requests.get 函数中的参数。

答案 2 :(得分:0)

好的,因为标记为正确的答案是典型的“你为什么要做 x?X 不好”之一,这里是关于如何为仍然需要知道的人执行此操作的实际答案。

您必须对代码进行猴子补丁,因此只需导入 from http.client import HTTPConnection 并将 HTTPConnection._http_vsn_str 设置为等于 `HTTP/X.Y. 示例:

from http.client import HTTPConnection
HTTPConnection._http_vsn_str = "HTTP/1.0"

这必须在您对请求执行任何操作之前完成。