You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python requests.get请求网页时gzip内容解码失败该如何解决

问题原因
  • 手动指定Accept-Encoding头引发冲突:requests默认会自动配置合理的Accept-Encoding值,且内置了gzip、deflate格式的自动解码能力,手动指定该头时额外加入了br(Brotli压缩)、compress等requests默认不支持的编码格式,同时部分站点不会严格遵守identity要求返回未压缩内容,容易出现编码匹配异常。
  • 反爬机制触发异常响应:目标站点对请求头做了校验,缺少User-Agent等浏览器常规请求头时,返回的不是正常的gzip压缩内容,而是反爬错误页、空内容,但响应头仍标记content-encoding: gzip,导致requests解码时校验失败。
  • 部分站点返回的压缩包存在格式异常,不符合标准gzip结构,触发解码错误。
解决方法

方法1:删除手动设置的Accept-Encoding头,补充常规浏览器请求头

这是最优先尝试的方案,requests会自动处理压缩解码逻辑,不需要手动配置编码相关参数,修改后代码如下:

import requests

url = r'https://www.huffpost.com/entry/sean-hannity-gutless-tucker-carlson_n_60d5806ae4b0b6b5a164633a'
headers = {
    # 替换为对应浏览器的User-Agent即可
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
}

r = requests.get(url, headers=headers)
print(r.text)

方法2:安装Brotli依赖支持br编码解码

如果站点默认返回br格式的压缩内容,requests默认无法自动处理,安装brotli库后requests会自动适配:

pip install brotli

安装完成后不需要修改其他代码,即可正常解析br编码的响应。

方法3:禁用自动解码,手动处理压缩内容

如果上述方法均无效,可以直接获取原始响应字节,手动处理解码逻辑,避免requests自动解码报错:

import requests
import gzip
from io import BytesIO

url = r'https://www.huffpost.com/entry/sean-hannity-gutless-tucker-carlson_n_60d5806ae4b0b6b5a164633a'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
}

r = requests.get(url, headers=headers, stream=True)
# 手动判断编码格式处理
content_encoding = r.headers.get('content-encoding', '')
if 'gzip' in content_encoding:
    content = gzip.GzipFile(fileobj=BytesIO(r.content)).read()
elif 'br' in content_encoding:
    import brotli
    content = brotli.decompress(r.content)
else:
    content = r.content

print(content.decode('utf-8'))

内容的提问来源于stack exchange,提问作者someguy67

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 07:24:08