【问题标题】:Pass query params to Erlang HTTP Request将查询参数传递给 Erlang HTTP 请求
【发布时间】:2012-08-28 12:49:10
【问题描述】:

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

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

我想给它一个带有哈希/字典/映射的根 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?

【问题讨论】:

  • 你是什么意思«把查询参数放在url中»?
  • 刚刚编辑了问题

标签: http erlang url-parameters


【解决方案1】:

我不确定究竟你所说的“哈希”是什么意思,但是如果你想从元组构造一个查询字符串,那是一项相当艰巨的任务。

我不熟悉 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)

【讨论】:

  • 我想给它一个带有哈希/字典/映射的根 URL(在 json {"a" : "b", "c" : "d"} 中),然后附加它正确到网址的末尾。 => "www.facebook.com?a=b&c=d"
  • Erlang 的字符串处理能力可能有所欠缺,但我认为您可以编写一个方法来很容易地做到这一点。如果你想不通,请咨询 mochijson2 之类的库。
【解决方案2】:

试试这个功能

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"

【讨论】:

    猜你喜欢
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 2016-04-01
    • 2017-01-14
    • 2015-04-09
    • 2019-09-11
    相关资源
    最近更新 更多