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

使用requests.get请求Powerball网站返回编码结果不一致问题排查

请求Powerball网站返回内容编码不一致的原因分析

问题描述

执行以下代码时,每次返回的内容格式不稳定:有时是可读的ASCII文本,有时却是非ASCII乱码格式,但page.encoding始终显示为utf-8。即使复制浏览器发送的HTTP请求头,问题依然存在。

HEADERS = ({'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
            'Accept-Language': 'en-US,en;q=0.9',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7'})

page = requests.get('https://www.powerball.com/', headers=HEADERS)
print(page.text)
print(page.encoding)

核心原因

  • 缺失Accept-Encoding请求头导致压缩逻辑不稳定:你的请求头未指定支持的内容压缩格式(如gzip、br),服务器会随机选择返回压缩后的二进制数据或明文内容。当返回压缩数据时,若requests的自动解压缩逻辑未正确识别,就会显示为乱码;而page.encoding会被默认设置为utf-8,和实际压缩内容的编码不匹配。
  • 服务器/CDN节点的动态分发差异:网站可能使用了负载均衡或CDN,不同节点对请求的处理逻辑不一致,部分节点返回压缩内容,部分返回明文,导致每次请求结果不同。

解决办法

  • 在请求头中添加Accept-Encoding字段,明确告知服务器支持的压缩格式,让服务器稳定返回可被正确解压缩的内容:
    HEADERS = ({'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
                'Accept-Language': 'en-US,en;q=0.9',
                'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
                'Accept-Encoding': 'gzip, deflate, br'})
    
  • 检查响应头的Content-Encoding字段,确认服务器是否返回了压缩内容:
    print(page.headers.get('Content-Encoding'))
    
  • 若自动解压缩失效,可手动对响应内容进行解压缩(以gzip为例):
    import gzip
    from io import BytesIO
    
    if page.headers.get('Content-Encoding') == 'gzip':
        content = gzip.decompress(page.content)
        print(content.decode('utf-8'))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:13:16