【问题标题】:How to define the HTTP protocol version in requests?如何在请求中定义 HTTP 协议版本?
【发布时间】:2015-10-22 01:37:20
【问题描述】:
import requests  
requests.get("http://www.sample.com")

如何修改参数以发送如下请求:

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

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

【问题讨论】:

  • 来自文档:请求允许您发送 HTTP/1.1 请求。为什么要指定协议版本?让请求担心这些事情。
  • @hiroprotagonist 我想抓取一个网站。但是网站分析了http请求头的大部分参数和http协议版本,以避免被机器人抓取。只有使用http 1.0访问网站时,才会返回正确的结果。
  • @maston 我使用了一个名为headers 的变量来传递User-Agent 字符串,如下所示: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'}

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


【解决方案1】:

好的,因为标记为正确的答案是典型的“你为什么要做 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"

这必须在你对请求做任何事情之前完成。

【讨论】:

    【解决方案2】:

    尝试传递一个 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 函数中的参数。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • "基本不支持 HTTP/1.0" -- 你还是可以send even http 0.9 requests in some cases
      • @Lukasa 通常真的不需要考虑HTTP协议的版本,但有时网站不想被爬取。所以我必须使 HTTP 请求适合网站的要求以获得正确的回报。我要抓取的网站只能在 HTTP 1.0 上正确返回。感谢您的帮助。
      猜你喜欢
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 2016-07-09
      • 1970-01-01
      相关资源
      最近更新 更多