2015-09-16 22 views
8

Voglio eseguire il comando di seguito in Elixir utilizzando la Libreria HTTPoison.Come eseguire DELETE in Elixir usando HTTPoison?

$ curl -X DELETE -H "expired: 1442395800" -H "signature: ******************" -d '{"api_key":"***************","delete_path":"*******","expired":"****"}' https://cdn.idcfcloud.com/api/v0/caches 
{"status":"success","messages":"We accept the cache deleted successfully."} 

Quando controllo il documento come DELETE in HTTPoison

def delete!(url, headers \\ [], options \\ []), do: request!(:delete, url, "", headers, options) 

Ci sono solo url e header necessari. Quindi dove dovrei inserire il corpo della richiesta (il corpo JSON in curl)?

In Elixir, ho cercato

req_body = "{\"api_key\":\"#{api_key}\",\"delete_path\":\"#{delete_path}\",\"expired\":\"#{expired}\"}" 

url = "https://cdn.idcfcloud.com/api/v0/caches"                       

response = HTTPoison.delete!(url, header, [req_body]) 

ma sembra non funzionare. Qualcuno può dire come farlo nel modo giusto per favore?

risposta

6

Come hai identificato, HTTPoison.delete!/3 invierà un "" come corpo postale. Ci sono state domande qui prima circa se un corpo è valida per una richiesta DELETE - vedi Is an entity body allowed for an HTTP DELETE request?

È possibile tuttavia bypass questa funzione e chiamare request!/5 direttamente:

req_body = "{\"api_key\":\"#{api_key}\",\"delete_path\":\"#{delete_path}\",\"expired\":\"#{expired}\"}" 

url = "https://cdn.idcfcloud.com/api/v0/caches"                       

response = HTTPoison.request!(:delete, url, req_body, header) 

ho risposto a una domanda diversa che dà più informazioni sulla generazione di un corpo postale - Create Github Token using Elixir HTTPoison Library

+0

grazie mille, ha funzionato !!!! –

+0

Vorrei che il team HTTPoison considerasse questo caso d'uso ... L'API Stripe ad esempio accetta determinati flag nelle richieste di eliminazione (ad esempio, quando si desidera annullare un abbonamento ma tenerlo attivo fino alla fine del periodo di fatturazione, si imposta ' at_period_end' a "true"), quindi devi usare 'HTTPoison.request' con il parametro': delete' per farlo funzionare. –