【问题标题】:Python sending POST requests/ multipart/form-dataPython 发送 POST 请求/multipart/form-data
【发布时间】:2019-12-05 11:30:41
【问题描述】:

我只是在工作中处理 API 连接。我已经发出了一些 GET 和 PUT 请求,但现在我遇到了 POST 问题。 API documantation is here。这是我测试但收到 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)

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

【问题讨论】:

    标签: python api post python-requests multipartform-data


    【解决方案1】:

    您好像缺少了order_documents 参数,它需要是一个数组并且还需要调用order_documents。

    尝试将您的 data 变量更改为:

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

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

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

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

    【讨论】:

    • 感谢您的回答。我按照您的建议更改了代码,但仍然收到 400 作为响应:/
    • 您是否正确地将 order_id 作为 URL 的一部分发送?你能分享你的新代码吗?
    • 你试过打印response.text吗?这是否包含更多错误消息?
    • 是的,我试过了。只有这个显示: { "message" : "Bad Request", "status" : 400 }
    • 也许您可以尝试使用 Postman 之类的工具来发送您的请求,看看它是否真的有效,或者您可能错过了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多