21

我使用 curl 发送带有文件数据的 POST 请求。

我正在尝试使用 python requests 模块来实现相同的目的。这是我的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' 
4

1 回答 1

45

此处无需使用.read(),直接流式传输对象即可。您确实需要明确设置 Content-Type 标头;curl使用时这样做--datarequests不这样做:

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

于 2013-04-22T10:48:07.727 回答