Python请求 - 从文件POST数据

时间:2013-04-22 10:41:55

标签: python python-requests

我使用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' 

1 个答案:

答案 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()成功返回),它也会自动关闭。