【问题标题】:Python http post a file using request libraryPython http 使用请求库发布文件
【发布时间】:2013-12-07 19:53:56
【问题描述】:

我必须将文件连同一些数据发布到 api。 这是我为测试编写的python代码:

fl={'payload' : open('C:/data/log2.txt')}
params = {
        'topic':'pos',
        'store':storeID,
         }

r = requests.post(url,files=fl,data=params)

print r.status
print r.text

但我总是收到一条消息说,“文件格式不正确”

我使用 POSTMAN 测试了 api(用于测试 rest API 的 Chrome 扩展),它似乎与 postman 一起工作我得到了成功响应并发送了文件,这是一个快照。

【问题讨论】:

  • 你能发布你得到的堆栈跟踪吗?
  • 我没有收到错误消息,我只是收到来自服务器的回复说“文件格式不正确”。
  • 听起来您的日志文件格式可能不正确...您的代码可能很好。在您的问题中,您引用了两个不同的文件,amazonlog.log 和 log2.txt。确保您的代码中的文件与amazonlog.log 使用相同的名称和相同的内容发送。也许你需要一个.log 扩展...?
  • 服务器接受任何文本文件,我使用邮递员用 log2.txt 对其进行了测试,服务器接受它。我现在无法检查,但我会在我恢复工作后立即检查。
  • 我尝试使用相同的文件名和内容。虽然它与邮递员一起工作,但它不适用于 python 请求。我怀疑在 python 请求模块中存在与编码相关的错误。对于使用邮递员上传的同一个文件,我在 python 中得到响应: {"status": "Error", "message": "{'payload': [u'File type is not supported']}"}

标签: python http-post python-requests


【解决方案1】:

From the docs

>>> url = 'http://httpbin.org/post'
>>> files = {'file': open('report.xls', 'rb')}

>>> r = requests.post(url, files=files)
>>> r.text
{
  ...
  "files": {
    "file": "<censored...binary...data>"
  },
  ...
}

尝试将'rb' 添加到您的打开语句中,以便您上传二进制数据。

改变

fl={'payload' : open('C:/data/log2.txt')}

到

fl={'payload' : open('C:/data/log2.txt', 'rb')}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 2021-05-17
    相关资源
    最近更新 更多