记一次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后数据正常了

相关文章
|
2月前
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
142 0
|
5月前
|
JSON API 数据格式
如何用 Python 的 requests 库发送 JSON 数据的 POST 请求
使用 requests 库发送 JSON 数据的 POST 请求是一个非常简单且实用的操作。通过将目标 URL 和 JSON 数据传递给 requests.post 方法,你可以轻松发送请求并处理响应。本篇文章介绍了从安装 requests 库,到发送 JSON 数据的 POST 请求,再到处理响应的整个流程。希望这篇文章能帮助你更好地理解并应用这个强大的 HTTP 请求库。
|
5月前
|
编解码 Java
请求参数中文乱码-POST解决方法
请求参数中文乱码-POST解决方法
|
算法 Python
程序解码错误-由python的requests.post 请求结果乱码引起的思考
最近,在使用python的requests.post的时候,不论结果如何处理,得到的都是乱码。乱码的原因是什么?Accept-Encoding和Content-Encoding的本质是什么?
466 0
|
JSON 数据格式
requests--重定向,序列化
requests--重定向,序列化
|
JSON PHP 数据格式
PHP中json传递请求字符串网址函数http_build_query()与parse_str(),将POST参数组转换拼接成GET请求链接
PHP中json传递请求字符串网址函数http_build_query()与parse_str(),将POST参数组转换拼接成GET请求链接
134 0
|
JSON 数据格式 Python
如何使用Request方法发送Post请求、JSON文件介绍、Python中的JSON数据以及获取到的JSON数据的解析。
如何使用Request方法发送Post请求、JSON文件介绍、Python中的JSON数据以及获取到的JSON数据的解析。
|
JSON Java 数据格式
浏览器Header和cookie字符串形式转Json
浏览器Header和cookie字符串形式转Json
161 0
浏览器Header和cookie字符串形式转Json
|
JSON 数据格式 Python
Python实战:使用requests通过post方式提交json数据
Python实战:使用requests通过post方式提交json数据
581 0
Response响应字符数据
Response响应字符数据
83 0
Response响应字符数据