2017-08-31 126 views
1

这是我在Python中需要的post请求的目标:POST请求文件python-requests

我得到了XML文件,url和身份验证令牌。根据xml文件,我从服务器返回xml响应。

req = requests.post(url='http://abc123.com/index.php/plan/', \  
      headers={'auth-token': 'abCdeFgh'}, \ 
      data={'data': open('sample_plan.xml', 'rb')}) 

发布请求状态代码是200,但在像“<error>invalid XML for request</error>” xml响应错误。假设xml文件在我的发布请求中填充了错误的参数。 但在另一个工具 - 邮递员 - https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en?它的工作和成功与正确的XML响应。我在邮差:

  • 页眉: 关键:验证令牌:ABCDEFGH

  • 在身体:选择 表单数据的选项.. 重点:数据:选择sample_plan.xml文件..

目标为参数(所有参数是强制性的)交请求的: 1.在头 - 身份验证令牌 2.在身体 - 与名称/内容识别数据= XML文件

哪个参数应该我将发布请求的文件放入?我已经尝试几乎所有 - 基于python-requests文档...

感谢您的帮助!

回答

1

不知何故经过几个小时的尝试我明白了!

正确的参数是文件,并且必须有带有3个参数的元组值的'数据'键。否则,它并没有正常工作......

从我所用的请求文档文件多编码上传参数http://docs.python-requests.org/en/master/api/关键“数据”,这我是3元组+ 值(敦促“文件名”,FileObj文件,“CONTENT_TYPE”)

因此,对于我的问题的答案是(也使用“与”关键字,因此文件的套房后,正确关闭完)

with open('sample_plan.xml', 'rb') as payload: 
    headers = {'auth-token': 'abCdeFgh'} 
    files = {'data': ('sample_plan.xml', payload, 'text/xml')} 
    req = requests.post(url='http://abc123.com/index.php/plan/', \ 
      headers=headers, files=files)