首页 > 解决方案 > Python 发送 POST 请求/multipart/form-data

问题描述

我只是在工作中处理 API 连接。我已经发出了一些 GET 和 PUT 请求,但现在我遇到了 POST 问题。API 文档在这里。这是我测试但收到 400 个错误请求的代码:

import requests

files = {'files': ('fv.pdf', open(r"C:\python\API\fv.pdf", 'rb'))}
data = {"order_documents":[{'file_name':"fv.pdf", 'type_code':'CUSTOMER_INVOICE' }]}

header = {
    'Authorization': '###########################',
}
response = requests.post("https://######.com/api/orders/40100476277994-A/documents", headers=header, files = files, data = data)

print(response.status_code)
print(response.url)

有人知道我该如何处理吗?

标签: pythonapipostpython-requestsmultipartform-data

解决方案


看起来您缺少order_documents参数,它需要是一个数组并且还需要称为 order_documents。

尝试将data变量更改为:

data = {"order_documents": [ {'file_name':"fv.pdf", 'type_code':'CUSTOMER_INVOICE' } ] }

API 期望files作为参数名称,您的字典将发送file到服务器。files您提供的参数名称session.post仅用于requests库,而不是发送到服务器的实际参数。API 还需要一个数组中的多个文件,因此您需要更改文件对象。

files = [
    ('files', ('fv.pdf', open(r"C:\python\API\fv.pdf", 'rb')),
]

另外,我认为您不需要使用 requests.Session(),只需使用 requests.post(),除非您计划多次使用会话对象进行后续请求。


推荐阅读