2016-01-06 95 views
0

我試圖通過其REST API自動清除Edgecast上的文件。向Python請求EdgeCast REST API返回405'方法不允許'

此代碼工作的bash腳本中:

curl -s -H "Authorization: tok:$EC_AUTH_TOKEN" -H 'Accept: application/json' -H 'Content-Type: application/json' -X PUT -d "{ \"MediaPath\":\"$PURGE_PATH\", \"MediaType\":3 }" https://api.edgecast.com/v2/mcc/customers/$ACCT_ID/edge/purge 

但這Python版本並不:

def purge_file(file_path): 
buff = StringIO() 
c = pycurl.Curl() 
post_data = {'MediaPath': file_path, 'MediaType': 3} 
# Form data must be provided already urlencoded. 
postfields = json.dumps(post_data, separators=(',', ':')) 
c.setopt(c.POSTFIELDS, postfields) 
c.setopt(c.URL, PURGE_URL) 
c.setopt(pycurl.HTTPHEADER, ['Authorization: tok:' + EC_AUTH_TOKEN, 
          'Accept: application/json', 
          'Content-Type: application/json']) 
c.setopt(c.WRITEDATA, buff) 
c.perform() 
c.close() 
body = buff.getvalue() 
print (body) 

也沒有這樣的:

def purge_file(file_path): 
values = {'MediaPath': urllib.quote_plus(file_path), 
      'MediaType': 3} 
post_data = json.dumps(values, separators=(',', ':')) 
request = urllib2.Request(PURGE_URL, data=post_data, headers={'Accept': 'application/json', 
                   'Content-Type': 'application/json', 
                   'Authorization': 'tok:' + EC_AUTH_TOKEN}) 
response = urllib2.urlopen(request) 
print response.read() 

兩者的Python版本返回錯誤405:方法不允許。

感謝您的幫助!

回答

0

目標API需要PUT請求。您正在發送POST請求。這就是它拋出這個錯誤的原因。

您可以添加此將數據發送作爲PUT要求:

c.setopt(pycurl.CUSTOMREQUEST, "PUT") 

但我強烈建議您使用真棒requests庫來處理REST調用。示例PUT請求將如下所示:

requests.put("http://httpbin.org/put", data = {"key":"value"}) 
+1

D'oh!謝謝您的幫助! – Seanonymous

相關問題