Question

I am using cowboy( https://github.com/extend/cowboy) for one restful web service, I need to get the params from "http://localhost:8080/?a=1&b=2&c=32"

init({tcp, http}, Req, Opts) ->
    log4erl:debug("~p~n", [Opts]),
    {ok, Req, undefined_state}.

handle(Req, State) ->
    {ok, Req2} = cowboy_http_req:reply(200, [], <<"Hello World!">>, Req),
    io:format("How to get the params from Req ? "),
    {ok, Req2, State}.

terminate(Req, State) ->
    log4erl:debug("~p~p~n", [Req, State]),
    ok.
Was it helpful?

Solution

You should use the cowboy_http_req:qs_val/2 function, e.g. cowboy_http_req:qs_val(<<"a">>, Req), look at https://github.com/extend/cowboy/blob/master/examples/echo_get/src/toppage_handler.erl for an example.

You can also use cowboy_http_req:qs_vals/1 to retrieve a list of all query string values.

OTHER TIPS

For anyone who have upgrade to Cowboy 2, there are two ways of getting the query params.

You can get them all by using cowboy_req:parse_qs/1:

QsVals = cowboy_req:parse_qs(Req),
{_, Lang} = lists:keyfind(<<"lang">>, 1, QsVals).

Or specific ones by using cowboy_req:match_qs/2:

#{id := ID, lang := Lang} = cowboy_req:match_qs([id, lang], Req).

Read more in the cowboy docs where these examples where found.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top