Python Post - 继续获得响应400,但curl有效

时间:2017-07-28 02:00:12

标签: python curl sonarqube python-requests

我有一个简单的python 3脚本,它发送一个post请求来删除SonarQube中的项目。虽然我一直在使用我的python脚本,但是一个简单的curl命令可以工作......任何想法我的python脚本有什么问题?

import requests

headers = {
    'Authorization': 'Basic YWRtaW46YWRtaW4=',
}

files = [
    ('key', 'com.eclipseoptions.viewserver:viewserver:feature_VS-313-add-an-instruction-event-and-view'),
]

r = requests.post('http://devsonar/api/projects/delete', headers=headers, files=files)
print(r)

以下curl命令可以正常工作:

curl -X POST -H "Authorization: Basic YWRtaW46YWRtaW4=" -F "key=com.eclipseoptions.viewserver:viewserver:feature_VS-313-add-an-instruction-event-and-view" "http://devsonar/api/projects/delete"

2 个答案:

答案 0 :(得分:2)

Python请求确实是一个很好的库。 post中的Files选项用于上传文件,我不认为IntelliJ IDEA 2016.2.5 Build #IC-162.2228.15, built on October 14, 2016 JRE: 1.8.0_102-b14 amd64 JVM: Java HotSpot(TM) 64-Bit Server VM by Oracle Corporation 是文件,如果是这样,你必须以二进制模式读取文件,然后像com.eclipseoptions.viewserver:viewserver:feature_VS-313-add-an-instruction-event-and-view一样发送它。所以代码应该是:

files = {'key': open(filename, 'rb')}

check this有关使用python中的请求库上传文件的详细信息。

如果它不是文件,您可以直接将有效负载作为字典发送:

import requests
files = {'key': open(filename, 'rb')}
headers = {'Authorization': 'Basic YWRtaW46YWRtaW4='}
response=requests.post(url,files=files)

check this有关发送有效负载的详细信息。

答案 1 :(得分:0)

你应该使用数据而不是文件作为python脚本的输入,这应该有效:

import requests

headers = {
    'Authorization': 'Basic YWRtaW46YWRtaW4=',
}

files = [
    ('key', 'com.eclipseoptions.viewserver:viewserver:feature_VS-313-add-an-instruction-event-and-view'),
]

r = requests.post('http://devsonar/api/projects/delete', headers=headers, data=files)