Python 请求 Post - 无法识别文件上传的附加字段

Python Requests Post - Additional field is not recognized for file upload

我必须 post 使用分段上传的文件到公司内部的 REST 服务。端点需要文件作为 属性“文件”,并且它需要一个额外的 属性“DestinationPath”。这是我的工作:

url = r"http://<Internal IP>/upload"

files = {
  "DestinationPath": "/some/where/foo.txt",
  "file": open("test.txt", "rb")
}

response = requests.post(url, files=files)

服务器抱怨无法获取“DestinationPath”。我收到的完整错误消息是:

{'errors': {'DestinationPath': ['The DestinationPath field is required.']},
 'status': 400,
 'title': 'One or more validation errors occurred.',
 'traceId': '00-1993fbc53ab2ee418b683915dd7a440a-2338bd9cf34d414a-00',
 'type': 'https://tools.ietf.org/html/rfc7231#section-6.5.1'}

文件上传在 curl 中进行,因此必须 python 特定。

您可能想尝试使用 data 参数而不是 files

response = requests.post(url, data=files)

感谢@etemple1,我找到了问题的解决方案:

url = r"http://<Internal IP>/upload"
data = {
    "DestinationPath": "/some/where/foo.txt",
}

with open("test.txt", "rb") as content:
    files = {
        "file": content.read(),
    }

    response = requests.post(url, data=data, files=files)

分段上传的数据需要分为“数据”和“文件”。它们随后由请求库合并到 http post 的正文中。