【问题标题】:Python requests - POST data from a filePython 请求 - 从文件中 POST 数据
【发布时间】:2013-04-15 05:41:39
【问题描述】:

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

【问题讨论】:

    标签: python file python-requests


    【解决方案1】:

    这里不需要使用.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() 成功返回)。

    【讨论】:

    • 怎么回事,你似乎总是回答最难的 Python 问题?
    • 不要相信我发布的所有内容..那里的第一次修订有错误。
    • @MartijnPieters 感谢您的回复。我仍然无法从文件中发布数据。如果我直接在脚本中使用这些值,它就可以工作。 ex-有效载荷={'ID':'ISM03'}。但是,当我将内容保存在文件中并按照您提到的方式使用时,我无法更新。我需要更改输入文件中的格式吗?
    • curl 期望数据文件已经正确编码,requests 也是如此。我以为你希望它按原样发布,就像 curl --data @filename 会做的那样。
    • @khrf:它不会关闭它,不。更新为使用文件对象作为上下文管理器以确保它被关闭。
    猜你喜欢
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2013-06-29
    • 2022-07-27
    • 2020-08-15
    • 2020-10-17
    相关资源
    最近更新 更多