Python requests.post multipart/form-data
Python requests.post multipart/form-data
我必须使用 REST API 将文件和信息上传到服务器。 API 使用了多部分形式,但我似乎无法正确使用它。
这是我根据 API 文档使用的信息。
表单参数:
- description – 分布的简短描述。
- release_notes_url – url 指向发行说明。
- zip_file – 包含分发文件的 ZIP 文件。
示例请求:
POST /api/v1/distribution HTTP/1.1
Host: api.company.onbe
Authorization: t=...
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryZayrf7leHxinyQsX
------WebKitFormBoundaryZayrf7leHxinyQsX
Content-Disposition: form-data; name="release_notes_url"
http://releases/3.0.0/release_notes_3_0_0.pdf
------WebKitFormBoundaryZayrf7leHxinyQsX
Content-Disposition: form-data; name="description"
This is the new distribution!
------WebKitFormBoundaryZayrf7leHxinyQsX
Content-Disposition: form-data; name="zip_file"; filename="BackEnd-3.0.0.zip"
Content-Type: application/x-zip-compressed
------WebKitFormBoundaryZayrf7leHxinyQsX--
我尝试了几件事,例如下面的代码,但我不断收到来自服务器的错误请求。
import requests
file= open('BackEnd-3.0.0.zip','r').read()
url = 'api.company.onbe/api/v1/distribution'
payload = {
'description' :'Some desc',
'release_notes_url':'Someurl.pdf',
'zip_file': file
}
response = requests.post(url, data=payload)
文档有一个示例 http://requests.readthedocs.org/en/latest/user/quickstart/#post-a-multipart-encoded-file
对于简单的用例,您真的应该从那里开始。
这个答案也解释了一起使用文件和数据。
这是一个适用于需要剪切粘贴代码的人的工作示例。 httpbin returns 一个 json 数据结构,描述了你所做的请求。在这种情况下,您可以看到 files
包含发布的文件数据,而 form
包含表单 vars。 headers
表明确实是 multipart/form-data
请求。
>>> import requests
>>> from pprint import pprint
>>> url = 'http://httpbin.org/post'
>>> files = {'file': ('report.csv', 'some,data,to,send\nanother,row,to,send\n')}
>>> response = requests.post(url, data={
... 'description' :'Some desc',
... 'release_notes_url':'Someurl.pdf'
... }, files=files)
>>> pprint(response.json())
{u'args': {},
u'data': u'',
u'files': {u'file': u'some,data,to,send\nanother,row,to,send\n'},
u'form': {u'description': u'Some desc', u'release_notes_url': u'Someurl.pdf'},
u'headers': {u'Accept': u'*/*',
u'Accept-Encoding': u'gzip, deflate',
u'Content-Length': u'394',
u'Content-Type': u'multipart/form-data; boundary=ebf9f03029db4c2799ae16b5428b06bd',
u'Host': u'httpbin.org',
u'User-Agent': u'python-requests/2.10.0'},
u'json': None,
u'origin': u'73.0.41.38',
u'url': u'http://httpbin.org/post'}
尽情享受!
我必须使用 REST API 将文件和信息上传到服务器。 API 使用了多部分形式,但我似乎无法正确使用它。
这是我根据 API 文档使用的信息。
表单参数:
- description – 分布的简短描述。
- release_notes_url – url 指向发行说明。
- zip_file – 包含分发文件的 ZIP 文件。
示例请求:
POST /api/v1/distribution HTTP/1.1
Host: api.company.onbe
Authorization: t=...
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryZayrf7leHxinyQsX
------WebKitFormBoundaryZayrf7leHxinyQsX
Content-Disposition: form-data; name="release_notes_url"
http://releases/3.0.0/release_notes_3_0_0.pdf
------WebKitFormBoundaryZayrf7leHxinyQsX
Content-Disposition: form-data; name="description"
This is the new distribution!
------WebKitFormBoundaryZayrf7leHxinyQsX
Content-Disposition: form-data; name="zip_file"; filename="BackEnd-3.0.0.zip"
Content-Type: application/x-zip-compressed
------WebKitFormBoundaryZayrf7leHxinyQsX--
我尝试了几件事,例如下面的代码,但我不断收到来自服务器的错误请求。
import requests
file= open('BackEnd-3.0.0.zip','r').read()
url = 'api.company.onbe/api/v1/distribution'
payload = {
'description' :'Some desc',
'release_notes_url':'Someurl.pdf',
'zip_file': file
}
response = requests.post(url, data=payload)
文档有一个示例 http://requests.readthedocs.org/en/latest/user/quickstart/#post-a-multipart-encoded-file
对于简单的用例,您真的应该从那里开始。
这个答案也解释了一起使用文件和数据。
这是一个适用于需要剪切粘贴代码的人的工作示例。 httpbin returns 一个 json 数据结构,描述了你所做的请求。在这种情况下,您可以看到 files
包含发布的文件数据,而 form
包含表单 vars。 headers
表明确实是 multipart/form-data
请求。
>>> import requests
>>> from pprint import pprint
>>> url = 'http://httpbin.org/post'
>>> files = {'file': ('report.csv', 'some,data,to,send\nanother,row,to,send\n')}
>>> response = requests.post(url, data={
... 'description' :'Some desc',
... 'release_notes_url':'Someurl.pdf'
... }, files=files)
>>> pprint(response.json())
{u'args': {},
u'data': u'',
u'files': {u'file': u'some,data,to,send\nanother,row,to,send\n'},
u'form': {u'description': u'Some desc', u'release_notes_url': u'Someurl.pdf'},
u'headers': {u'Accept': u'*/*',
u'Accept-Encoding': u'gzip, deflate',
u'Content-Length': u'394',
u'Content-Type': u'multipart/form-data; boundary=ebf9f03029db4c2799ae16b5428b06bd',
u'Host': u'httpbin.org',
u'User-Agent': u'python-requests/2.10.0'},
u'json': None,
u'origin': u'73.0.41.38',
u'url': u'http://httpbin.org/post'}
尽情享受!