2015-08-28 23 views
5

Aşağıdaki API'yı izleyen python istekleri modülüyle bir HTTP DELETE yapmak istiyorum; HTTP python istekleri modülü ile silme

https://thingspeak.com/docs/channels#create

DELETE https://api.thingspeak.com/channels/4/feeds 
     api_key=XXXXXXXXXXXXXXXX 

Python v2.7 kullanıyorum ve modül istekleri ediyorum. Benim python kodum böyle görünüyor;

def clear(channel_id):  
    data = {} 
    data['api_key'] = 'DUCYS8xufsV613VX' 
    URL_delete = "http://api.thingspeak.com/channels/" + str(channel_id) + "/feeds" 
    r = requests.delete(URL_delete, data) 

requests.delete() yalnızca bir parametre kabul edebilir çünkü kod çalışmaz. Doğru kod nasıl görünmeli? Sen

import json 
mydata = {} 
mydata['api_key'] = "Jsa9i23jka" 
r = requests.delete(URL_delete, data=json.dumps(mydata)) 

istiyorum

cevap

4

Sen adında girişi, 'veri' kullanmak zorunda ve ben aslında bir hiç, 'mydata' senin sözlüğü dönüştürmek zorunda JSON dampingli istediğinizi tahmin ediyorum json dizgisi. Bunun için json.dumps() kullanabilirsiniz.

Ben kullandığınız API bilmiyorum, ama bunun sesiyle aslında bunun için ihtiyacınız, URL parametresini değil veri aktarmak istiyorum:

r = requests.delete(URL_delete, params=mydata) 

mydata dicti dönüştürmek gerek yok bir json dizesine.

+0

Teşekkürler! Doğru cevap olarak test edildi. 2. yöntem çalışır. Anlamadığım bir şey var. Neden "r = request.delete (URL_delete, mydata)" başarısız, ancak "r = request.delete (URL_delete, params = mydata)" neden çalışıyor? HTTP Post için param kullanmam gerekmiyor. Neden farkı? – user781486

+3

https://github.com/kennethreitz/requests/blob/master/requests/api.py adresine bakınız. 'Post' 'post (url, data = None ...) 'olarak tanımlanırken, delete' delete (url, ** kwargs)' olarak tanımlanırken görebilirsiniz. Kwargs, bunun 'anahtarlı bir argüman' olması gerektiği anlamına gelir. Gönderme çalışmaları, bazı argümanların açık bir şekilde listelenmesine neden oluyor. –

2

Veri paramlarını @Eugene tarafından önerilen şekilde gönderebilirsiniz, ancak geleneksel olarak silme istekleri yalnızca URL'yi içerir ve başka hiçbir şey içermez. Nedeni bir RESTful url kaynağı benzersiz bir şekilde tanımlamak ve böylece silme için ek parametreler sağlama ihtiyacını ortadan kaldırmasıdır. Öte yandan, eğer 'APIKEY'in' kimlik doğrulaması ile bir ilgisi varsa, o zaman talep verileri yerine başlıkların bir parçası olmalıdır.

headers = {'APIKEY': 'xxx'} 
response = requests.delete(url, data=json.dumps(payload), headers=headers)