1

我正在尝试将本地图像上传到 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 工具获得了图像的二进制数据。)

4

0 回答 0