ostinelli / misultin

Misultin (pronounced mee-sool-téen) is an Erlang library for building fast lightweight HTTP(S) servers, which also supports websockets.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

How to use Req:parse_post() with {auto_recv_body,false} ?

egobrain opened this issue · comments

Some times i need to auto receive request body. For example for getting vars from "/login" POST request.
And also i need to upload big files on server and save it in special folder. (Big means > 100MB).
In this cases i need to have different post_max_size. And in first case i need to allow auto_recv_body.

Here is a part of sample code.

start(Port) ->
    misultin:start_link([{port, Port}, {auto_recv_body, false}, {loop, fun(Req) -> handle_http(Req) end}]).

stop() ->
    misultin:stop().

handle_http(Req) ->
    handle(Req:get(method), Req:resource([lowercase, urldecode]), Req).

handle('GET',["login"],Req) ->
    Req:file("login.html");
handle('POST',["login"],Req) ->
    Args = Req:parse_post(),
    case Req:get_variable("login",Args) of
    undefined ->
        Req:ok("Error. You need to login.");
    Login ->
        Req:ok("Hello, "++Login)
    end;
handle('POST',["upload_big_file"],Req) ->
    get_body_and_save_to_file(Req).

Every time I try to login using POST-request I get the message "Error. You need to login.".
Do I need to manually load each time the body of the request and process it to get the variables. Or there is a way to use parse_post() ??

why would querystring have anything to do with the body? are you experiencing an error? what are you trying to achieve?

if you ask for help you should consider an extra important 20 seconds of your life to formulate a question :)

thank you.

Sorry! It was my browser mistake. :(
I re posted question.

you are using Req:parse_qs, which does what it actually states: parses a QueryString.

if you want to parse a body, use the appropriate Req:parse_body method.

All of this is in examples/docs, for instance here's an example:
https://github.com/ostinelli/misultin/blob/master/examples/misultin_echo.erl#L45

Exports here:
https://github.com/ostinelli/misultin/blob/master/EXPORTS.md

Does this solve your issue?

r.

That's really hard to write question after vocation.
Of course it's my mistake. Not Req:parse_qs(), but Req:parse_post().
But using parse_post() doesn't solve my issue.

I'm looking for some function like Req:get_body(post_max_size). Which will automatically upload body of request, ignoring {auto_recv_body,false}.

thank you for this.

misultin has been discontinued, my reasons here.

r.