urlopen调用API无内容时返回格式不一致,是自身特性还是API问题?
问题分析与结论
这绝对不是urlopen的预期行为,问题出在你调用的HTTP端点服务上。
原因说明
urlopen仅负责原样返回服务器发送的响应内容,不会主动修改或生成任何响应体内容。不管服务器返回空字符串''还是空数组[],都是后端接口自身的输出,urlopen只是原封不动地传递给你。- 规范的API在无数据返回时,应保持响应格式一致:要么统一返回空数组
[],要么返回结构统一的JSON对象(比如{"data": []}),甚至可以返回204 No Content状态码(此时响应体为空)。出现两种不同的空响应格式,完全是后端接口的逻辑漏洞。
临时解决方法
为避免JSON解析报错,可在解析前先做格式统一处理:
import json from urllib.request import urlopen import certifi response = urlopen(url, cafile=certifi.where()) raw_response = response.read().decode("utf-8") # 统一格式:空字符串转为空数组 if raw_response.strip() == '': parsed_data = [] else: parsed_data = json.loads(raw_response)
根本解决建议
联系该API的提供者,反馈响应格式不一致的问题,要求他们统一无数据场景下的输出格式,这才是彻底解决问题的方式。
内容的提问来源于stack exchange,提问作者JobHunter69
相关产品推荐
相关产品推荐

