【问题标题】:python-requests equivalent to curl's --data-binary?python-requests 相当于 curl 的 --data-binary?
【发布时间】:2013-07-14 21:05:17
【问题描述】:

Curl 可以选择使用--data-binary option 发送文件。

在测试Qualys WAS API 时,以下 curl 命令有效:

curl -u "username:password" -H "content-type: text/xml" -X "POST" --data-binary @- "https://qualysapi.qualys.com/qps/rest/3.0/search/was/webapp" < post.xml

post.xml:

<ServiceRequest><filters><Criteria operator="CONTAINS" field="name">PB - </Criteria></filters></ServiceRequest>

使用 Python 的请求模块,我不断收到 HTTPError: 415 Client Error: Unsupported Media Type。

import requests
url = 'https://qualysapi.qualys.com/qps/rest/3.0/search/was/webapp'
payload = '<ServiceRequest><filters><Criteria operator="CONTAINS" field="name">PB - </Criteria></filters></ServiceRequest>'
headers = {'X-Requested-With': 'Python requests', 'Content-type': 'application/json'}
r = requests.post(url, data=payload, headers=headers, auth=('username', 'password'))

在尝试提交文件files参数时,也以415错误结束。

import requests
url = 'https://qualysapi.qualys.com/qps/rest/3.0/search/was/webapp'
payload = '<ServiceRequest><filters><Criteria operator="CONTAINS" field="name">PB - </Criteria></filters></ServiceRequest>'
headers = {'X-Requested-With': 'Python requests', 'Content-type': 'application/json'}
r = requests.post(url, data=payload, headers=headers, auth=('username', 'password'))

我设置它的原因是将其合并到qualysapi Python package

【问题讨论】:

  • 您的问题标题具有误导性;您的问题在于标题,而不是如何用requests 模拟--data-binary。我链接到的骗子确实问了这个问题。
  • 从您的payload 内容和您的Content-type 标头来看,我对您在下面发布的答案的第一反应是是的,duh。 :-D

标签: python rest python-requests


【解决方案1】:

原来我应该有的标题是

headers = {'X-Requested-With': 'Python requests', 'Content-type': 'text/xml'}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    相关资源
    最近更新 更多