【问题标题】:Requests Different Data Between Python 2 vs Python 3在 Python 2 和 Python 3 之间请求不同的数据
【发布时间】: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


【解决方案1】:

要不要试试:

print(response.encoding)
print(response.content)

【讨论】:

  • .encoding 显示为 utf-8。打印内容显示的内容与我在 response.text 上删除编码相同。只是一串字符 a\r\n\x1f\x8b\x08\x00\x00\ 我相信这是以字节为单位的。我尝试使用 utf-8 进行解码,并且状态解码一个字节。不知道为什么 Py3 与 Py2 相比如此不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
相关资源
最近更新 更多