





















来源:百度搜索
在使用 Python 的 requests 库进行 HTTP GET 请求时,如果你遇到的问题是服务器返回了压缩编码(如 gzip 或 deflate)的数据,但是你希望直接接收原始数据而非解压缩的数据,你可以通过以下几种方式解决:
1. 禁用自动解压
requests 库默认会尝试自动解压响应内容。如果你不希望它自动解压,可以通过设置 decode_content 参数为 False 来实现。这样,你就可以接收到压缩的数据。
python
Copy Code
import requests
response = requests.get('http://example.com', stream=True)
# 禁用自动解压
response.raw.decode_content = False
# 现在你可以读取压缩的响应内容
content = response.raw.read()
print(content)
2. 手动处理压缩内容
如果你需要进一步处理压缩数据,比如你想要查看压缩后的数据或者对其进行某种分析,你可以在读取内容后手动解压。例如,使用 Python 的 zlib 或 gzip 模块来解压内容。
python
Copy Code
import requests
import zlib
import io
response = requests.get('http://example.com', stream=True)
# 禁用自动解压
response.raw.decode_content = False
# 读取压缩内容
compressed_content = response.raw.read()
# 使用 zlib 解压 gzip 压缩的数据
decompressed_content = zlib.decompress(compressed_content, zlib.MAX_WBITS | 16) # 对于 gzip 使用 16 + zlib.MAX_WBITS
print(decompressed_content)
3. 使用正确的 Content-Encoding 头部
如果你知道服务器使用的是哪种压缩方式(例如 gzip 或 deflate),你可以在请求中指定 Accept-Encoding 头部来告诉服务器你想要接收原始压缩格式的数据。但是,通常服务器会根据客户端请求的 Accept-Encoding 头部来决定是否压缩响应。如果你想要原始数据,最好是禁用自动解压。
python
Copy Code
import requests
headers = {'Accept-Encoding': 'identity'} # 请求不压缩数据,但服务器可能会忽略这个请求头
response = requests.get('http://example.com', headers=headers)
# 然后禁用自动解压,如上所示。
4. 使用第三方库处理特定压缩格式
对于特定的压缩格式(如 brotli),你可能需要使用专门的库来处理,例如 Brotli:
python
Copy Code
import requests
from brotli import decompress as brotli_decompress
response = requests.get('http://example.com', stream=True)
# 禁用自动解压
response.raw.decode_content = False
compressed_content = response.raw.read()
decompressed_content = brotli_decompress(compressed_content) # 使用 Brotli 解压
print(decompressed_content)
总之,最简单和最直接的方法是禁用 requests 的自动解压功能,然后根据需要手动处理压缩数据。这样可以给你最大的灵活性来处理各种压缩格式的数据。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。