使用Requests模块在python中发布多部分数据

时间:2016-04-01 13:13:37

标签: python curl python-requests

我实际上想用python在web应用程序上发送mutlipart数据。我正在使用这个非常有用的请求模块(http://requests-fr.readthedocs.org/en/latest/)。

我必须发送一个音频文件(存储在系统本地)和2个参数(GPS协调信息)。

我已经使用curl命令进行操作,但我正在寻找一个Requests python实现。 这是curl命令:

curl -u "user:pass" -F 'audio=@file.wav' -F "latitude=42.44646" -F "longitude=8.46464" 'http://my_server_ip/web/rest/vocal' -v --digest

这就是我在python请求中尝试这样做的方法:

url = "http://my_server_ip/web/rest/vocal"
files = {'audio' : open('/PATH/record.wav','rb'),'latitude':42.44646,'longitude':8.46464}

r = requests.post(url, auth=HTTPDigestAuth('user','pass'),data=files)
r.json
print r.json  

目前,我得到的唯一回应是500错误。

有人明白什么是错的吗?如果您看到更好的解决方案,请随时告诉我:)

问候!

1 个答案:

答案 0 :(得分:0)

解决了!

解决方案是将文件和数据分开:

files = {'audio' : open('/PATH//record.wav','rb')} 
data = {'latitude':latitude,'longitude':longitude} 

并使用BOTH文件和数据参数构建resquest:

r=requests.post(url,auth=HTTPDigestAuth('user','pass'),files=files,data=data)