我正在尝试使用python请求库将CSV文件上传到API(这给出了很少的错误信息)。
(我正在运行Python 3.5并在OS X 10.11.6上使用请求版本2.18.4)
终端中的curl命令工作正常:curl -F 'file=@/path/to/file.csv' myurl.com/upload -H "Authorization: TOKEN sometoken"
Postman的multipart / form-data POST请求也可以,但我似乎无法使用python请求库。
我尝试了很多此请求的变体:
import requests
headers = {'Authorization': 'TOKEN sometoken', 'Content-Type': 'multipart/form-data'}
with open(file_path, 'rb') as f:
r = requests.post(myurl, headers=headers, data=f)
## I've also tried data={"file": f}
我的状态代码为200,但回复为{"success": "false"}
(令人沮丧地无益)。
与curl请求相比,我在python请求中缺少什么?
编辑:似乎-F
命令的curl
标志模拟已提交的HTML表单...有没有办法对请求执行此操作?
答案 0 :(得分:2)
在curl
代码中,您使用-F
参数,该参数将数据作为多部分邮件提交 - 换句话说,您正在上传文件。
使用requests
,您可以使用files
参数发布文件。一个例子:
import requests
headers = {'Authorization': 'TOKEN sometoken'}
data = {'file': open(file_path, 'rb')}
r = requests.post(myurl, headers=headers, files=data)
请注意,requests
会根据提交的数据自动创建Content-Type标头。
答案 1 :(得分:1)