我使用 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/