【发布时间】:2021-01-26 16:54:28
【问题描述】:
我在将一些简单的获取请求代码从 Python 2 转换为 3 时遇到问题。使用相同版本的请求 (2.25.1) 运行相同的代码我得到不同的响应标头和内容。使用 Py2,我可以正确获取内容/文本。然而,在 Py3 中使用相同的代码,我得到了乱码的内容/文本。 Py3 处理 get 请求的方式有什么不同吗??
response = requests.get(url)
print (response.headers)
print (response.text)
标头响应,Py2 与 3。请注意,一些专有数据已从 Py2 标头中删除。数据不会出现在 Py3 标头中。
{'X-Powered-By': 'ASP.NET', 'Transfer-Encoding': 'chunked', 'Content-Encoding': 'gzip', 'Vary': 'Accept-Encoding', 'Connection': 'close', 'Date': 'Tue, 26 Jan 2021 16:36:11 GMT', 'Server': 'Microsoft-IIS/6.0', 'Content-Type': 'text/plain; charset=utf-8' }
{'Connection': 'close', 'Date': 'Tue, 26 Jan 2021 16:36:16 GMT', 'Content-Type': 'text/plain; charset=utf-8', 'Server': 'Microsoft-IIS/6.0'}
py3 内容示例。
a
▼ ♦
408
ܙAo�8►���¶V.��BI���B�.��������V��♀��N��↔Z���N)��n��]♫U2L�~�↓�ӑ��♀►aX��%p�2�ܓ��ܓ���ѳ;�(�`5���k,HFS9¶◄�♣���n��
我尝试对 response.text 进行 .encode('utf-8') 编码,但我得到了一个类似
a\r\n\x1f\xef\xbf\xbd\x08\x00\x00\
为什么同一个请求在不同版本的python中会有差异?
【问题讨论】:
-
'Content-Encoding': 'gzip'...? Python 3 的标头中没有关于gzip的内容? -
Py2 和 3 具有相同的请求标头。我没有添加任何自定义标题。 'Accept-Encoding': 'gzip, deflate', 'Accept': '/' 已列出。我确实尝试对内容进行 gzip 解压缩,认为它可能已被压缩。但错误地说不是。
-
然后检查服务器端。以我的经验,当我使用 Python2 时,我必须做一些处理编码的事情。如果您的客户端相同并且只有 Py2 客户端正常工作,那么您的服务器端可以为 Python2 客户端做一些额外的事情,这对 Py3 客户端来说并不重要。
-
我不拥有服务器,因此无法对此进行调查。请求 URL 在 Py2 和浏览器中工作正常。所以我不确定为什么 Py3 的行为会有所不同。
标签: python python-3.x python-requests