2017-07-28 60 views
1

我有一個簡單的python 3腳本,它發送一個post請求來刪除SonarQube中的一個項目。當我一直在我的python腳本中,一個簡單的curl命令工作...任何想法我的python腳本有什麼問題?Python Post - 繼續獲得響應400,但捲曲工程

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

的Python請求真的是一個好的圖書館。文件中的文件選項用於上傳文件,我不認爲com.eclipseoptions.viewserver:viewserver:feature_VS-313-add-an-instruction-event-and-view是一個文件,如果是這樣,你必須以二進制模式讀取文件,然後發送它像files = {'key': open(filename, 'rb')}。所以代碼應該是:

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

check this有關使用python中的請求庫上載文件的詳細信息。有關發送有效載荷的細節

import requests 
headers = {'Authorization': 'Basic YWRtaW46YWRtaW4='} 
data = {'key': 'com.eclipseoptions.viewserver:viewserver:feature_VS-313-add-an-instruction-event-and-view'} 
response=requests.post(url,data=data,headers=headers) 

check this

如果它不是一個文件,你可以直接發送有效載荷爲這樣一本字典。

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)