【发布时间】:2020-10-05 03:50:09
【问题描述】:
我正在向我的一个 API 发送一组图像的请求。 API 以 JSON 格式返回这些图像。此格式包含有关资源的数据以及表示 Base64 图像的单个属性。
返回的 JSON 示例。
{
"id": 548613,
"filename": "00548613.png",
"pictureTaken": "2020-03-30T11:38:21.003",
"isVisible": true,
"lotcode": 23,
"company": "05",
"concern": "46",
"base64": "..."
}
The correct content of the Base64
The incorrectly parsed Base64
这是通过 Python3 请求库完成的。当我收到来自 API 的成功响应时,我尝试使用以下方法将正文解码为 JSON:
url = self.__url__(f"/rest/all/V1/products/{sku}/images")
headers = self.__headers__()
r = requests.get(url=url, headers=headers)
if r.status_code == 200:
return r.json()
elif r.status_code == 404:
return None
else:
raise IOError(
f"Error retrieving product '{sku}', got {r.status_code}: '{r.text}'")
调用.json()会导致Base64内容乱七八糟,有些部分不存在,有些被其他字符替换。我尝试使用r.content.decode() 和utf-8 和ascii 选项手动解码内容,看看这是否是问题after seeing this post。可悲的是,这没有奏效。
我知道服务器的响应是正确的,它适用于 Postman,并且调用 print(r.content) 会生成一个包含有效 Base64 的 JSON 文档。
我将如何反序列化来自 API 的响应以获取有效的 Base64?
【问题讨论】:
-
@Trenton 我假设你的意思是 Base64,很遗憾我不能分享它,因为我没有序列化资源的所有权。
-
@Harjan 随机拍一张鸭子的照片。将其转换为 base64。将该base64放入您提供的请求中,看看是否出现问题。如果是,请发布该请求,以便我们尝试。
-
@Trenton 我添加了一些 Base64,正确解析后应该是 1024x1024 的粉红色和白色框的图片。
标签: python json python-requests base64