我使用curl发送带有文件数据的POST请求。
我正在尝试使用python请求模块实现相同的功能。这是我的python脚本
import requests
payload=open('data','rb').read()
r = requests.post('https://IP_ADDRESS/rest/rest/2', auth=('userid', 'password'), data=payload , verify=False)
print r.text
数据文件如下所示
'ID' : 'ISM03'
但我的脚本不是从文件中发布数据。我在这里错过了一些东西。
在Curl中,我曾经有过如下命令
Curl --data @filename -ik -X POST 'https://IP_ADDRESS/rest/rest/2'
答案 0 :(得分:35)
您无需在此处使用.read()
,只需直接流式传输对象即可。您需要显式设置Content-Type标头; curl
在使用--data
时执行此操作,但requests
不执行此操作:
with open('data','rb') as payload:
headers = {'content-type': 'application/x-www-form-urlencoded'}
r = requests.post('https://IP_ADDRESS/rest/rest/2', auth=('userid', 'password'),
data=payload, verify=False, headers=headers)
我已经使用了打开文件对象作为上下文管理器,因此当块退出时(例如发生异常或requests.post()
成功返回),它也会自动关闭。