将查询参数传递给Erlang HTTP请求

时间:2012-09-03 20:28:34

标签: http erlang url-parameters

我正在尝试使用网址发送参数,例如http://localhost:3000/register?name=Chris&job=typist。我可以将所有内容一次性发送为httpc:request的字符串,但我找不到将查询参数放入URL(给定字典)的函数。

我应该使用另一个具有此功能的HTTP库吗?

我想给它一个带有hash / dictonary / map的根URL(在json {“a”:“b”,“c”:“d”}),然后将它正确地附加到结尾网址。例如,给定"www.facebook.com"[{"a", "b"}, {"c", "d"}]会给"www.facebook.com?a=b&c=d"

以下是Ruby的类似问题:Ruby: How to turn a hash into HTTP parameters?

2 个答案:

答案 0 :(得分:0)

我不确定完全你的意思是“哈希”,但是如果你想从元组构造一个查询字符串,这是一个相当严格的任务。

我不熟悉httpc中提供所需功能的方法。您可以非常轻松地围绕request / 4编写包装器,类似于此。

(这个程序是匆匆构建的,可以给你一个想法,原谅任何错误)。

request(Method, Domain, {Path, Query, Fragment}, HTTPOptions, Options) -> 
    QueryString = lists:flatten([Path,
                   case Query of "" -> ""; _ -> [$? | Query] end,
                   case Fragment of "" -> ""; _ -> [$# | Fragment] end]);
    Request = concat(Domain, QueryString);
    httpc:request(Method, {Request, []}, HTTPOptions, Options).

您可以像

一样调用它

request(get, "http://www.example.com", {"/path", "", "bar?baz}, HTTPOptions, Options)

答案 1 :(得分:0)

尝试此功能

test(URL,QP)->URL++"?"++loop(QP,[]).

loop([{A,B}],QP)->QP++A++"="++B;
loop([{A,B}|T],QP)->loop(T,QP++A++"="++B++"&").

致电test("www.facebook.com",[{"a", "b"}, {"c", "d"}]). 它返回"www.facebook.com?a=b&c=d"