【问题标题】:python how to decode http responsepython如何解码http响应
【发布时间】:2019-12-01 11:15:12
【问题描述】:

我正在使用以下代码登录并从 api 端点检索数据,但似乎响应已编码并且我无法读取内容。我正在使用请求 requests-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▒▒

谁能告诉我如何从响应中解码和读取数据

【问题讨论】:

  • 你能显示print(repr(response.content))的输出吗?
  • response.headers['content-type'] 中有什么内容?
  • application/json 这是我在打印标题时得到的

标签: python python-2.7 http request python-requests


【解决方案1】:

响应使用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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2012-11-26
    • 1970-01-01
    相关资源
    最近更新 更多