【发布时间】:2013-08-21 17:41:37
【问题描述】:
能否在requests 1.2.3 版中禁用自动解码功能?
我查看了文档,但找不到任何东西,我目前遇到 gzip 解码错误,并希望手动调试通过请求传入的数据。
【问题讨论】:
能否在requests 1.2.3 版中禁用自动解码功能?
我查看了文档,但找不到任何东西,我目前遇到 gzip 解码错误,并希望手动调试通过请求传入的数据。
【问题讨论】:
您可以像这样访问原始响应:
resp = requests.get(url, stream=True)
resp.raw.read()
为了使用raw,您需要为原始请求设置stream=True。另外,raw 是一个类似文件的对象,从response.content 读取会影响查找光标。换句话说:如果您已经(试图)阅读response.content,response.raw.read() 将返回一个空字符串。
请参阅 requests 文档中的 FAQ: Encoded Data 和 Quickstart: raw response content。
【讨论】:
import requests
r = requests.get(url, stream=True)
with open(local_filename, 'wb') as f:
for chunk in r.raw.stream(1024, decode_content=False):
if chunk:
f.write(chunk)
这样,您将避免自动解压缩 gzip 编码的响应,并且仍然将其逐块写入文件(对于获取大文件很有用)
【讨论】: