首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >brotli.error: BrotliDecompress失败了?

brotli.error: BrotliDecompress失败了?
EN

Stack Overflow用户
提问于 2020-09-09 09:53:29
回答 1查看 2.8K关注 0票数 5

mycode python3.8

brotli=1.0.9

使用请求获取url,标头使用接受-编码=“br”,我需要使用解码br,因为我认为使用接受编码=br更好。

代码语言:javascript
运行
复制
import brotli
import requests 
headers = {}
headers['Accept'] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
headers['Accept-Encoding'] = "gzip, deflate, br"
headers['Host'] = "book.douban.com"
headers['Referer'] = "book.douban.com"
headers['Sec-Fetch-Dest'] = "document"
headers['Sec-Fetch-Mode'] = "navigate"
headers['Upgrade-Insecure-Requests'] = "1"

s=requests.Session()
url="https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4"
try:
    response = s.get(url, headers=headers)
except:
    return ""
if response.status_code == 200:
    print(response.headers)
    if response.headers.get('Content-Encoding') == 'br':
        data = brotli.decompress(response.content)
        data1 = data.decode('utf-8')
        return data1
    else:
        return response.text
return ""

提高误差

代码语言:javascript
运行
复制
data = brotli.decompress(response.content)
brotli.error: BrotliDecompress failed
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-02 22:11:24

请求的文档中没有提到这一点,但是一旦安装了布罗蒂,它就直接由请求处理。

这意味着response.content将被自动解码(类似于gzip)。你不需要做brotli.decompress(response.content)

如果没有安装brotli,则不会收到任何错误消息。相反,response.content将保持编码..。

编辑

深入了解请求代码,我发现请求使用urllib3.response,它实现了Brotli的使用。

加载后,urllib3.响应将查找Brotli的导入:

代码语言:javascript
运行
复制
try:
    import brotli
except ImportError:
    brotli = None

然后,在解码响应时,它将使用适当的解码器:

代码语言:javascript
运行
复制
def _get_decoder(mode):
    if "," in mode:
        return MultiDecoder(mode)

    if mode == "gzip":
        return GzipDecoder()

    if brotli is not None and mode == "br":
        return BrotliDecoder()

    return DeflateDecoder()

因此,如果安装了Brotli,解码就会发生,否则什么都不会发生,也不会向用户发出警告。

edit2事实上,在https://docs.python-requests.org/en/latest/user/quickstart/#binary-response-content中提到了这一点

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63809144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档