【问题标题】:requests module and compression请求模块和压缩
【发布时间】:2015-10-25 20:17:16
【问题描述】:

我一直在尝试查找 requests 模块关于压缩的默认行为,但我找不到任何东西,所以我在这里问:

requests 模块是否默认要求服务器进行压缩?我们必须在标题中指定它吗?

我在这里找到一个关于 urllib 的页面,上面说 header 必须要求压缩才能得到它:

http://www.diveintopython.net/http_web_services/gzip_compression.html

请求是一样的吗?

【问题讨论】:

    标签: python python-requests


    【解决方案1】:

    你可以自己测试一下。请尝试以下操作:

    import requests
    req = requests.get("http://google.com")
    print(req.request.headers)
    

    这将打印发送到服务器的标头(默认标头,因为没有定义其他标头)。在我的系统上,我得到:

    {'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.7.0 CPython/2.7.8 Linux/4.1.8-100.fc21.x86_64'}
    

    因此,gzipdeflate 是可接受的压缩类型。服务器将选择其中之一。

    【讨论】:

      【解决方案2】:

      对于请求:默认情况下,带有正文的请求(例如 POST)不会压缩其正文,因为很少有服务器会支持。

      对于响应:默认情况下,它接受(通过请求标头)压缩和未压缩的响应。这可以通过通常方式设置Accept-Encoding 标头来覆盖。如果将 Accept 设置为仅允许压缩,则如果服务器不支持压缩,则可能无法处理您的请求。

      【讨论】:

      • 好的,我有两个答案告诉我标头指定它接受压缩数据。但是如果服务器可以提供压缩和未压缩的数据,它会选择什么?
      • @Rififi 你想错了:客户端(任何客户端)可以列出接受的编码。之后,服务器决定使用哪种编码。强制压缩响应的唯一方法是仅在 Accept 标头中压缩列表。但是,如果服务器不想使用压缩,请求就会失败。
      • 是的,对不起,如果我不清楚,这正是我的问题:服务器将如何在编码中进行选择?假设您告诉它您同时接受压缩和未压缩的数据,它会选择什么(通常)?
      • @Rififi 你不知道。这取决于什么服务器,什么服务器配置,以及可能的额外逻辑(例如,假设服务器上有一个脚本,它只在周一晚上并且冰淇淋店提前关门时压缩响应)。但通常明智的选择是压缩,以节省带宽。
      • 好的。但我可以调查,对吧?就像你说的,我只能提到压缩编码,并检查响应。如果服务器没有为我提供服务,我会知道它没有使用压缩编码(假设天气和冰淇淋店对压缩没有任何影响)。
      猜你喜欢
      • 2012-08-22
      • 2013-12-28
      • 2011-12-09
      • 2017-01-03
      • 2019-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多