2011-05-30 30 views
5

Tengo un par de funciones que realizan solicitudes HTTP POST/GET/HEAD.http post request erlang

Para la solicitud POST utilizo este:

http:request(post, {Url, [], ContentType, Body}, [], []). 

Mientras que para la cabeza/Get utilizo:

http:request(Method, {Url, []}, [], []) 

¿Cómo puedo escribir esto dos llamadas en un único? La solicitud POST tiene esas dos variables adicionales con respecto a la solicitud GET/HEAD. Probé con listas vacías pero tengo:

** exception error: no function clause matching 

muchas gracias

Respuesta

8

Para utilizar la llamada a httpc una sola vez, es necesario extraer la tupla Request de la llamada, porque eso es lo que es único entre los métodos cuando los usa:

post(URL, ContentType, Body) -> request(post, {URL, [], ContentType, Body}). 
get(URL)      -> request(get, {URL, []}). 
head(URL)     -> request(head, {URL, []}). 

request(Method, Request) -> 
    httpc:request(Method, Request, [], []). 
2
Body = "name=<<name>>&pass=<<pass>>", 
httpc:request(post, {Url, [], "application/x-www-form-urlencoded", Body}, [], []).