【问题标题】:Python 3.x how to get http version (using requests library)Python 3.x 如何获取 http 版本(使用 requests 库)
【发布时间】:2016-05-03 19:10:01
【问题描述】:

最好使用 requests 库

HTTP/1.1 200 OK        <-- I want this...
Content-Type: text/html; charset=utf-8

似乎没有提供该属性http://docs.python-requests.org/en/master/api/#requests.Response

有没有办法访问原始响应字符串?

我找到了http://docs.python-requests.org/en/master/user/quickstart/#raw-response-content 但我没有看到任何内容

r = requests.head(uri, stream=True)
print(r.raw.read(10)) # -> b''

【问题讨论】:

    标签: python-3.x python-requests


    【解决方案1】:

    我想你想要的是这个。在 raw 上调用 version 将为您提供 HTTP 版本。 (我找到了使用 Shodan 运行 HTTP 1.0 的服务器示例用于测试目的)

    >>> import requests
    >>> response = requests.get("http://104.71.136.252/", timeout=60, verify=False)
    >>> response.raw.version
    10
    >>> response = requests.get("http://stackoverflow.com", timeout=60, verify=False)
    >>> response.raw.version
    11
    

    这在文档中没有直接提到,我是通过使用 PyCharm 的自动完成功能找到的。但我已经调查过了。 HTTP 版本返回整数的原因是历史原因。

    对 python3 的请求使用 urllib3。 Urllib3 的类 urllib3.response.HTTPResponse 向后兼容 httplib 的 HTTPResponse 参见urllib3 docs

    现在如果它向后兼容,你必须检查 httplib 的文档,如果你搜索你会发现

    服务器使用的 HTTP 协议版本。 HTTP/1.0 为 10,HTTP/1.1 为 11。

    这里是确切的链接HTTPResponse.version

    【讨论】:

    • 谢谢!这似乎正是我想要的,但为什么版本返回为 int?我试图在源代码中找到它,但不知道在哪里。
    • 我可以假设 HTTP/2.0 将返回 20 吗?我尝试了http2.golang.org,它返回 11。实时标头说服务器正在返回 HTTP/2.0 OK。我刚刚意识到我的示例显示了一个请求...抱歉。
    • 我认为这不像使用 HTTP 2.0 返回 20 那样简单。检查 RFC tools.ietf.org/html/rfc7540#section-3.2
    猜你喜欢
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多