我有一个简单的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"
答案 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)