python - python如何解码http响应
问题描述
我正在使用以下代码登录并从 api 端点检索数据,但似乎响应已编码并且我无法读取内容。我正在使用请求 requestes-0.0.1
import requests
import json
import os
http_proxy = "http://192.168.10.20:8888"
https_proxy = "https://192.168.10.20:8888"
proxyDict = {
"http" : http_proxy,
"https" : https_proxy,
}
session = requests.Session()
payloadopt = 'user_id=tom&password=xxxxx'
s = session.post('https://login.milock.com/api/login',data=payloadopt, proxies=proxyDict, verify=False, headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0', 'Accept':'application/json, text/plain, */*', 'Accept-Language':'en-US,en;q=0.5', 'Accept-Encoding':'gzip, deflate, br', 'Content-Type':'application/x-www-form-urlencoded'}, stream=True)
当我在控制台上打印相同内容时的响应
▒▒7▒E`▒▒YD▒▒k▒샄▒q▒▒f,▒▒G▒(U▒Uv▒4ڍ▒w&▒▒!Ψ▒▒▒▒E5Q▒_▒▒{▒F▒▒<.▒▒▒▒4▒▒> p{▒k9▒▒֏9▒▒
有人可以告诉我如何从响应中解码和读取数据
解决方案
响应使用brotli压缩进行编码。标准库不支持这种压缩方法。您可以从 pypi 安装第三方软件包来解压缩它 - 有许多软件包可用。
例如
$ pip install brotli
>>> import brotli
>>> decompressed = brotli.decompress(response.content)
>>> dict_ = json.loads(decompressed)
如果您不想安装第三方模块,'br'
请从请求中的“接受编码”标头中删除:
'Accept-Encoding':'gzip, deflate, br' -> 'Accept-Encoding':'gzip, deflate'
推荐阅读
- go - 处理来自单个通道的多个错误
- java - 映射数据集行获取“此表达式的目标类型必须是功能接口”
- c# - 如何将带有错误规范(无效的用户名或无效的密码)的 HttpResponseException 返回到前端?
- php - 变量 $term_id 没有出现在 wordpress 的 get_term_meta 函数中
- javascript - 如何更新自引用对象文字中的动态属性?
- php - 使用 fetch(PDO::FETCH_ASSOC); 无法获得所有结果;
- sql - 使用 ActiveRecord 获取具有条件的一系列计数
- html - 为什么引导程序将默认字体大小设置为 10px?
- powershell - 为什么 Test-AzureName 总是返回 false?
- python - 没有为 http.cookiejar 找到匹配的分布