Python 设置多部分编码文件POST的名称标头
我试图使用将文件上载到表单,但从Tomcat服务器返回一个错误,错误是: 客户端发送的请求在语法上不正确 阅读后,我设法打印了我正在发出的请求,当与浏览器中发出的请求进行比较时,我注意到请求负载Python 设置多部分编码文件POST的名称标头,python,python-requests,Python,Python Requests,我试图使用将文件上载到表单,但从Tomcat服务器返回一个错误,错误是: 客户端发送的请求在语法上不正确 阅读后,我设法打印了我正在发出的请求,当与浏览器中发出的请求进行比较时,我注意到请求负载name未对齐,因此我猜这是我的问题 发布多部分编码文件的请求表明,您可以显式覆盖文件名、内容类型和标题: >>> url = 'http://httpbin.org/post' >>> files = {'file': ('report.xls', open('rep
name
未对齐,因此我猜这是我的问题
发布多部分编码文件的请求表明,您可以显式覆盖文件名、内容类型和标题:
>>> url = 'http://httpbin.org/post'
>>> files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
这似乎很好,但如上所述,我还需要设置名称
以及文件名
和内容类型
在GitHub repo上,我找到了\u encode\u files
方法,其中似乎允许指定名称
:
rf = RequestField(name=k, data=fp.read(),
filename=fn, headers=fh)
但我似乎无法实现这一点,在我的应用程序中,与上面的示例一样,我在引用文件之前指定了文件名:
files = {'file': (filename, open(filePath, 'rb'), 'application/x-zip-compressed')}
我在这里遗漏了什么?名称是从您的
文件中的键设置的。只需更改该键即可将名称字段设置为所需的值:
>>> import requests
>>> files = {'foobar': ('foo.txt', 'foo\ncontents\n','text/plain')}
>>> req = requests.Request('POST', 'http://httpbin.org/post', files=files).prepare()
>>> print req.body
--49773910d9514216894b697cb70e9f21
Content-Disposition: form-data; name="foobar"; filename="foo.txt"
Content-Type: text/plain
foo
contents
--49773910d9514216894b697cb70e9f21--
请注意每个部分Content Disposition
标题的name=“foobar”
元素。我简直不敢相信我没有发现这一点。谢谢