记一次requests.get()返回数据乱码问题

简介: 【10月更文挑战第21天】使用`requests.get()`请求网页时遇到乱码问题,尝试通过设置`encoding`和使用`apparent_encoding`自动判断编码均无效。最终发现问题是由于请求头中的`Accept-Encoding`包含了`br`(Brotli压缩格式),导致响应内容未被正确解压。移除`Accept-Encoding`中的`br`后,问题得到解决。

现象

使用requests.get()请求,添加了header, 返回的数据使用了text接收;打印出来发现是乱码;

尝试解决

1、 设置encoding

ret = requests.get(url,headers=headers).text
ret.encoding = 'utf-8'

方法不生效;

2、利用apparent_encoding来自动判断返回值的编码格式,然后用返回的编码格式进行设置;

print(ret.apparent_encoding) #返回的编码

打印了一下,发现是None;

最后解决

搜索发现:造成乱码除了编码格式方面外,另外还有可能是因为压缩格式导致的。在请求头中,‘Accept-Encoding’是浏览器发给服务器,声明浏览器支持的编码类,一般有gzip,deflate,br 等等。很多网站都是以gzip的格式来输出页面,此时输出response.content和response.text时会自动解压,但是当以br格式压缩时,却不会自动解压;

Brotli是一种由 Google开发的全新压缩算法,可以有效减小传输内容大小,加速分发效果。当客户端的请求携带请求头 Accept-Encoding: br 时,表示客户端希望获取对应资源时进行 Brotli 压缩。当服务端响应携带响应头 Content-Encoding: br 时,表示服务端响应的内容是 Brotli 压缩的资源。需要注意的是,只有在 HTTPS 的情况下,浏览器才会发送 br 这个 Accept-Encoding;

检查header发现 请求头的Accept-Encoding中包含br;

删除Accept-Encoding后数据正常了

相关文章
|
8月前
|
消息中间件 数据采集 NoSQL
秒级行情推送系统实战:从触发、采集到入库的端到端架构
本文设计了一套秒级实时行情推送系统,涵盖触发、采集、缓冲、入库与推送五层架构,结合动态代理IP、Kafka/Redis缓冲及WebSocket推送,实现金融数据低延迟、高并发处理,适用于股票、数字货币等实时行情场景。
1292 3
秒级行情推送系统实战:从触发、采集到入库的端到端架构
|
存储 SQL 缓存
Hadoop入门(一篇就够了)
Hadoop入门(一篇就够了)
39623 5
Hadoop入门(一篇就够了)
|
4月前
|
Ubuntu 安全 Java
Docker 拉取部署 OpenJDK 全指南:替代方案、实操步骤与最佳实践
本文详解Docker部署OpenJDK全流程:搭建环境、选择eclipse-temurin等替代镜像,避开已弃用的官方镜像,通过Dockerfile构建应用,配置JVM参数与容器资源限制,并提供最佳实践与问题排查方案,助力企业级Java应用高效、安全运行。
2961 2
|
10月前
|
Arthas 监控 Java
Java死锁 如何定位?如何避免Java死锁?(图解+秒懂+史上最全)
Java死锁 如何定位?如何避免Java死锁?(图解+秒懂+史上最全)
Java死锁 如何定位?如何避免Java死锁?(图解+秒懂+史上最全)
|
Linux Docker Windows
最新可用Docker国内镜像源加速列表
本列表为科研工作者提供可用的Docker镜像网站,帮助网络不佳用户加速访问。内容包括多个国内主流Docker Hub镜像加速站,支持多种系统配置方法,如Ubuntu、macOS和Windows。提供详细使用教程和配置命令,适用于科研及开发环境。列表持续更新,建议收藏使用。
6663 3
|
11月前
|
弹性计算 JavaScript Ubuntu
WebSocket协议相关的测试命令工具使用简介
本文介绍了针对WebSocket的测试工具wscat和websocat的基本使用方法,以及通过curl命令测试HTTP/HTTPS协议的方式。对于WebSocket,直接使用curl测试较为复杂,推荐使用wscat或websocat。文中详细说明了这两种工具的安装步骤、常用参数及连接示例,例如在ECS上开启8080端口监听并进行消息收发测试。此外,还提供了curl命令的手动设置头部信息以模拟WebSocket握手的示例,但指出curl仅能作为客户端测试工具,无法模拟服务器。
3583 5
|
数据采集 JSON 网络协议
Python编程异步爬虫——aiohttp的使用
Python编程异步爬虫——aiohttp的使用
840 0