【发布时间】: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