【问题标题】:HTTP 2 request in python 2.7python 2.7中的HTTP 2请求
【发布时间】:2016-04-06 21:01:02
【问题描述】:

在python中向HTTP/1和HTTP/2发出请求有什么区别吗?

我可以像在 python 中一样进行 HTTP/1.x 调用

url = 'http://someURL'
values = {'param1' : 'key',
          'param2' : 'key2'}
data = urllib.urlencode(values)
print data
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
print the_page

python 是否默认支持制作 HTTP/2 或者我应该添加任何额外的东西。

【问题讨论】:

  • 几乎可以肯定它使用 HTTP2,您可以查看相关文档。但我认为你最好使用requests 库。 (pip install requests)。他们说urllib2“彻底坏掉了……”
  • @PadraicCunningham 这是requests 的作者。
  • @PythonGuy 来自文档,我找不到请求支持 HTTP/2,hyper 的作者也说请求不支持 HTTP/2
  • @Johnykutty 你确定吗?再检查一遍。但是您始终可以在 TCP 数据包中发送原始套接字(是的,您可以!)并使用 http 2.0 读取服务器输出。

标签: python http http2


【解决方案1】:

正如 cmets 中其他人提到的问题,requests 库不支持 HTTP/2。

来自requestsdocumentation

Requests 允许您发送有机的、草稿式的 HTTP/1.1 请求,而无需人工操作。

到目前为止,我所知道的唯一 Python 的 HTTP/2 客户端是 hyper,它引用自文档:

支持 Python 3.4 和 Python 2.7.9,可以说 HTTP/2 和 HTTP/1.1

【讨论】:

    【解决方案2】:

    作为参考,截至 2019 年,另一个支持 HTTP/2 的库是 HTTPX

    HTTPX 是适用于 Python 3 的全功能 HTTP 客户端,它提供同步和异步 API,并支持 HTTP/1.1 和 HTTP/2。

    这至少需要 Python 3.6。但是,在 2020 年撰写本文时,Python 2 已经 EOL,因此 Python 3.6 应该适合任何用户。

    【讨论】:

      【解决方案3】:

      hyperrequests 模块一起使用。

      import requests
      from hyper.contrib import HTTP20Adapter
      s = requests.Session()
      s.mount('https://http2bin.org', HTTP20Adapter())
      r = s.get('https://http2bin.org/get')
      print(r.status_code)
      

      https://hyper.readthedocs.io/en/latest/quickstart.html#requests-integration

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-01
        • 2014-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-16
        • 2010-09-11
        相关资源
        最近更新 更多