Python 请求 - 快速知道响应是否是 json 可解析的

标签 python json python-requests

我使用 Python 的 requests 库编写了一个特定的 API 包装器。

当它使用 requests.get 获得响应时,它会尝试解析为 json,如果不起作用则获取原始内容:

resp = requests.get(url, ...)  

try:
    resp_content = resp.json()
except ValueError:
    resp_content = resp.content

return resp_content

这对我来说是正确的。问题是当下载的response是图片文件时,需要多长时间,比如很大,那么从进入try,到json解析失败再进入,需要很长时间except

(我不知道 .json() 是否需要超长的时间才能出错,或者如果一旦出错就需要一段时间才能进入 except 。)

有没有办法在不尝试用 .json() 解析它的情况下查看 resp 是否可 json 解析?像 resp.is_json 这样的东西,所以我可以立即知道要采用哪个分支(resp.json()resp.content),而不是等待 30 秒(大文件可能需要几分钟)。

最佳答案

根据响应的一致性,您可以检查返回的 header 是否包含内容类型application/json:

resp.headers.get('content-type') == 'application/json'

关于Python 请求 - 快速知道响应是否是 json 可解析的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44012811/

相关文章:

python - 使用 RASA 的 API 的正确方法是什么(rasa.core.processor - 遇到异常)?

python - Tornado官方canonical "Hello, world"example app报错怎么解决?

python - 如何在 python 字符串中的子字符串之间查找子字符串?

ruby-on-rails - Rails 4 - JSON 响应中的 HTML

java - 将 Json 字符串转换为 Java 对象给出 null (null)

macos - "ModuleNotFoundError: No Module Named ' 在 macOS 上使用 Visual Studio Code 请求 '"

php - 在 PHP 中更快地处理多个 cURL 请求

Python:根据条件划分列表的元素

javascript - 在 Windows 7 上安装 contextify 错误 : `gyp` failed with exit code: 2

java - RecyclerView 不显示 JSON 数据