【发布时间】:2026-01-06 02:20:03
【问题描述】:
我正在尝试发布到 API(使用 SlimPHP 构建),该 API 接受图像以及 JSON 形式的附加图像元数据。
我已使用 REST 客户端工具验证 API 可以正常工作,并且可以成功 POST 到服务。所有数据都正确存储。
我现在正在尝试使用 Python 发布 - 但是我的 JSON 数据似乎没有保存。
我的代码:
data = {'key1': 'value1', 'key2': 'value2'}
url = 'http://mydomain.com/api/endpoint'
headers = {'Authorization': 'my-api-key'}
files = {'file': (FILE, open(PATH, 'rb'), 'image/jpg', {'Expires': '0'})}
r = requests.post(url, files=files, headers=headers, data=data)
--
我已尝试设置其他标题,
即:/
headers = {'Authorization': 'unique-auth-key', 'Content-type': 'multipart/form-data'}
或
headers = {'Authorization': 'unique-auth-key', 'Content-type': 'application/json'}
这些会导致 500 错误。
2014 年 7 月 14 日更新:
使用 chrome 扩展(高级 Rest 客户端)我的 POST 成功 - 这是控制台显示为有效负载的内容:
------WebKitFormBoundarysBpiwrA3hnGPUbMA
Content-Disposition: form-data; name="data"
test
------WebKitFormBoundarysBpiwrA3hnGPUbMA
Content-Disposition: form-data; name="file"; filename="image.jpg"
Content-Type: image/jpeg
------WebKitFormBoundarysBpiwrA3hnGPUbMA--
我不太确定这意味着什么......
【问题讨论】:
-
您必须提供 API 规范才能运行调用。使用
curl、HTTPie 或类似工具的示例会有所帮助。通常,JSON 数据作为唯一的内容在正文中发送。如果你想将它与文件上传结合起来,你可能会使用某种形式,一个文件是图像,另一个包含 JSON 的文本字段。无论如何,data应该是一个字符串,你提供一个字典。将其更改为data=json.dumps(data)可能会有所帮助。 -
这个 cURL 请求有效: curl -i -F data='{"key": "value", "key": "value", "key": "value"}' -F name =image.jpg -F file=@image.jpg -H "授权:abcd-efgh-ijkl-mnop" my-url.com/api/endpoint
标签: python rest python-requests