2011-05-30 3 views
5

J'ai quelques fonctions qui effectuent des requêtes HTTP POST/GET/HEAD.http post demande erlang

Pour la requête POST-je utiliser ceci:

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

Alors que pour la tête/GET J'utilise:

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

Comment puis-je écrire ces deux appels dans un unique? La requête POST a ces deux variables supplémentaires par rapport à la requête GET/HEAD. J'ai essayé avec des listes vides, mais je suis arrivé:

** exception error: no function clause matching 

Merci beaucoup

Répondre

8

Pour utiliser l'appel à httpc une seule fois, vous devez extraire le Request tuple de l'appel parce que c'est ce qui est unique entre les méthodes comme vous les utilisez:

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}, [], []).