Python 请求模块和压缩

Python 请求模块和压缩,python,python-requests,Python,Python Requests,我一直在试图找到requests模块关于压缩的默认行为,但我找不到任何东西,所以我在这里询问: 默认情况下,请求模块是否要求服务器进行压缩?我们必须在标题中指定它吗 我在这里发现了一个关于urllib的页面,其中说头部必须请求压缩才能获得它: 请求也是这样吗?对于请求:带有正文(例如POST)的请求在默认情况下不会压缩正文,因为很少有服务器支持压缩正文 对于响应:默认情况下,它接受(通过请求头)压缩和未压缩的响应。这可以通过使用常规方法设置接受编码头来覆盖。如果将Accept设置为仅允许压缩,

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

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

我在这里发现了一个关于urllib的页面,其中说头部必须请求压缩才能获得它:


请求也是这样吗?

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


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

您可以自己测试它。请尝试以下操作:

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'}

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

好的,我有两个答案告诉我头指定它接受压缩数据。但是,如果服务器可以提供压缩和未压缩的数据,它会选择什么?@rifif如果你想得不对:客户端(任何客户端)都可以列出可接受的编码。之后,服务器决定使用哪种编码。强制压缩响应的唯一方法是仅在Accept标头中压缩列表。但是,如果服务器不想使用压缩,请求将失败。是的,如果我不清楚,很抱歉,这正是我的问题:服务器将如何选择编码?假设你告诉它你接受压缩和未压缩的数据,它会选择什么(一般)?@rifif你不知道。这取决于什么服务器、什么服务器配置,以及可能的额外逻辑(例如,假设服务器上有一个脚本,只有在星期一晚上,冰淇淋店提前关门的情况下才压缩响应)。但通常明智的选择是压缩,以节省带宽。但我可以调查,对吗?正如您所说,我只能提到压缩编码,并检查响应。如果服务器未能为我提供某些服务,我将知道它没有使用压缩编码(假设天气和冰淇淋店对压缩没有任何影响)。