2015-08-28 23 views
5

Mi piacerebbe fare un DELETE HTTP con il modulo richieste python che segue l'API di seguito;HTTP Elimina con il modulo richieste python

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

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

Sto usando Python v2.7 e chiede modulo. Il mio codice Python assomiglia a questo;

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) 

Il codice non funziona perché request.delete() può accettare solo un parametro. Come dovrebbe essere il codice corretto?

risposta

4

Volete

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

si deve usare l'ingresso di nome, 'dati', e sto indovinando che si vuole in realtà JSON scaricato, in modo da avere per convertire il vostro dizionario, 'mydata' a un stringa json. Puoi usare json.dumps() per quello.

Non so l'API che si sta utilizzando, ma dal suono di esso si vuole realmente passare parametro URL, meno di dati, per questo è necessario:

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

Non c'è bisogno di convertire mydata dict a una stringa JSON.

+0

Grazie! Testato per essere la risposta corretta. Il secondo metodo funziona. Una cosa che non capisco. Perché 'r = requests.delete (URL_delete, mydata)' fallisce ma 'r = requests.delete (URL_delete, params = mydata)' funziona? Per HTTP Post, non ho bisogno di usare i parametri. Perché la differenza? – user781486

+3

Se dai un'occhiata a https://github.com/kennethreitz/requests/blob/master/requests/api.py. Puoi vedere che 'post' è definito come' post (url, data = None ...) 'mentre delete è definito come' delete (url, ** kwargs) '. Il kwargs significa che deve essere un 'argomento chiave'. Il post funziona perché elenca esplicitamente alcuni argomenti. –

2

È possibile inviare i dati param come suggerito da @Eugene, ma le richieste di eliminazione convenzionali contengono solo url e nient'altro. Il motivo è che un URL RESTful dovrebbe identificare in modo univoco la risorsa, eliminando così la necessità di fornire parametri aggiuntivi per la cancellazione. D'altra parte, se il tuo 'APIKEY' ha qualcosa a che fare con l'autenticazione, allora dovrebbe essere parte delle intestazioni invece dei dati delle richieste, qualcosa del genere.

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