Python请求 - 从文件POST数据

use*_*101 17 python file 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
Run Code Online (Sandbox Code Playgroud)

数据文件如下所示

'ID' : 'ISM03'
Run Code Online (Sandbox Code Playgroud)

但我的脚本不是从文件中发布数据.我在这里错过了一些东西.

在Curl中,我曾经有过如下命令

Curl --data @filename -ik -X POST 'https://IP_ADDRESS/rest/rest/2' 
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 38

您无需在.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)
Run Code Online (Sandbox Code Playgroud)

我已经使用open文件对象作为上下文管理器,这样当块退出时它也会自动关闭(例如发生异常或requests.post()成功返回).

  • 怎么样,你似乎总是回答最棘手的python问题? (7认同)
  • 不要相信我发布的所有内容。那里的第一个修订版本存在错误。 (2认同)
  • “curl”期望数据文件*已经*被正确编码,“requests”也是如此。我假设您希望它按原样发布,就像“curl --data @filename”一样。 (2认同)
  • @khrf:它不会关闭它,不。更新为使用文件对象作为上下文管理器以确保其关闭。 (2认同)