【发布时间】:2018-10-04 09:22:47
【问题描述】:
当我想上传文件时,我正在处理需要此请求类型的站点的 REST API:
- 标题中的“授权”和多部分内容类型
- 文件格式为二进制字符串(正文)
- 请求 URL 中的文件类型
所以我做了这段代码:
import requests
url = 'http://httpbin.org/post'
parameters = {
'format': 'pdf',
}
headers = {
'Content-Type': 'multipart/form-data',
'Accept': 'application/json',
'Authorization' : 'Some authorization code'
}
data = {'file': open('1.pdf', 'rb')}
r = requests.post(url, params=parameters, headers=headers, data=data)
print(r.text)
但似乎请求正在删除数据:
{
"args": {
"format": "pdf"
},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "application/json",
"Accept-Encoding": "gzip, deflate",
"Authorization": "Some authorization code",
"Connection": "close",
"Content-Length": "30",
"Content-Type": "multipart/form-data",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.18.1"
},
"json": null,
"origin": "x.x.x.x",
"url": "http://httpbin.org/post?format=pdf"
}
当我删除请求中的“标头”部分时它可以工作:
r = requests.post(url, params=parameters, data=data)
因为响应是:
{
"args": {
"format": "pdf"
},
"data": "",
"files": {},
"form": {
"fax_file": "some samplae texts\n"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Content-Length": "30",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.18.1"
},
"json": null,
"origin": "x.x.x.x",
"url": "http://httpbin.org/post?format=pdf"
}
我也尝试过准备好的请求,结果是一样的。
【问题讨论】:
-
如果您在
data中通过读取文件而不是文件对象传递字节会发生什么? -
@match 仍然下降,直到我从标题中删除 'content-type'
标签: python rest post python-requests