【问题标题】:Universal Python HTTP response decoder通用 Python HTTP 响应解码器
【发布时间】:2018-02-02 09:03:50
【问题描述】:

我可能不擅长谷歌搜索,但到目前为止我已经干了。有没有一个通用的 HTTP 响应解码器,你给它正文和标头,然后它返回解码后的数据?

例如:

response = requests.get("...")
body = clever_package.decode(response.body, response.headers)

这是使用 requests 包来获取数据,尽管这不是绝对必要的。是否没有通用解码器采用 contentType 和 isBase64Encoded 标头并发挥其魔力?

也许我在这样的包中没有看到明显的缺陷,这就解释了为什么我在任何地方都找不到它。

干杯!

【问题讨论】:

标签: python http web response decoding


【解决方案1】:

解码是什么意思?只是字节到字符串数据?在这种情况下,python-chardet 将是您寻找标头未指定编码的情况(如果标头指定解码,只需从标头中指定的编码解码)。

如果您想以不同的方式解析 XML、JSON 等,您可能会在解码数据后使用各自的库(内置 json 模块、yaml 模块等)转换成 unicode 字符串。

【讨论】:

  • 我的意思是把它加载到一个有意义的数据类型中,比如Python中的字典,在json作为类型的例子中。我有以下位置:if event['headers']['Content-Type'] == 'application/x-www-form-urlencoded': body = json.loads(urllib.parse.parse_qs(body)['payload'][0]) elif 'application/json' in event['headers']['Content-Type']: body = json.loads(body) 对我来说,如果不编写这个笨重的 if 语句,我就无法重用一个函数来从两个不同的地方获取字典,这似乎很愚蠢。我不知道,也许我很傻。
  • 如果你已经在使用requestsresponse 对象应该有一个.json() 方法,如果它不能进行 JSON 解析,它将引发异常。 application/x-www-form-urlencoded 的另一个示例看起来非常特定于应用程序(它在 payload 表单元素中编码了 JSON,这不是通用的)。充其量您可以尝试 JSON,如果失败,请检查 application/x-www-form-urlencoded 并对其执行 parse_qs()(并返回)。
  • 我不知道我是怎么错过 .json 方法的……我会用那个。虽然给出了一些,但我可以看到解析所有类型的方法的想法是毫无用处的。尽管关于有效负载格式,您是对的,它是 PaperTrail 非常奇怪的 API。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 1970-01-01
相关资源
最近更新 更多