我正在尝试将本地图像上传到 Medium/images
端点(在此处记录)。
他们的示例请求如下所示:
Host: api.medium.com
Authorization: Bearer 181d415f34379af07b2c11d144dfbe35d
Content-Type: multipart/form-data; boundary=FormBoundaryXYZ
Accept: application/json
Accept-Charset: utf-8
--FormBoundaryXYZ
Content-Disposition: form-data; name="image"; filename="filename.png"
Content-Type: image/png
IMAGE_DATA
--FormBoundaryXYZ--
从未指定图像数据的类型,但我假设它是基于来自 Ancestry 的用于上传图像的非常相似的 API 调用的原始二进制文件。
目前,我有:
headers['Content-Type'] = 'multipart/form-data; boundary=FormBoundaryXYZ'
imageData = '''--FormBoundaryXYZ
Content-Disposition: form-data; name="image"; filename="filename.jpg"
Content-Type: image/jpeg
0000000000000011111111111111111111111111
0000000000000011111111111111111111111111
0000000000000011111111111111111111111111
0000000000000000011111111111111111111111
0000000000000000000111111111111111111111
0000000000000000000000000000000000000000
0000000000000000000000000000000000000000
0000000000000000000000000000000000000000
0000000000000000000001000000000000000000
0000000000000000000100000000000000000000
0000000000000000010000000000000000000000
0000000000000000000000000000000000000000
0000000010000000000000000000000000000000
0000000000001100000000000000000000000000
0000000000000100000001000000000000000000
0000000000000000000001000000000000000010
0000000000000000001001111111110000000001
0000000000000000000000100110000000000000
0000000000000000000000000001110000000000
0000000000000000011110001111111101100000
0000000000000000111111111111111111111111
0000000001000001111111111111111111111111
0000000000000011111111111111111111111111
0000000100001011111111111111111111111111
0000001100000001111111111111111111111111
0000110000000000000000000000000000000000
0001000000000000000000000000000000000000
--FormBoundaryXYZ--'''
def post_image(imgData):
req = r.post(base_url+'/images', headers=headers, data=imgData)
res = req.json()
return res
print(json.dumps(post_image(imageData), indent=2))
执行时,我得到错误响应:
{
"errors": [
{
"message": "Expected CR Received 10",
"code": -1
}
]
}
文档提到
正文中的所有行都必须以 \r\n 结尾。
而且我知道响应中的“10”必须是“\n”,所以我错过了“\r”。我尝试在每行终止的末尾显式添加“\r\n”,但随后出现错误
{
"errors": [
{
"message": "Expected alphabetic character, received 10",
"code": -1
}
]
}
或者
{
"errors": [
{
"message": "stream ended unexpectedly",
"code": -1
}
]
}
取决于我放置 /r/n 或删除它的位置。
我的问题是:有没有办法格式化我遗漏或过度思考的内容?我希望我只是在多部分/表单数据编码方面缺乏经验,而我可以以编程方式执行此操作。
谢谢!如果需要,我很乐意添加详细信息!
(附带说明:我使用dcode.fr/binary-image 工具获得了图像的二进制数据。)