牛仔HTTP POST处理程序

Joh*_*tin 2 erlang cowboy

我开始学习Erlang了.我想编写简单的基于牛仔的HTTP服务器,它可以接收通过HTTP POST发送的文件.所以我创建简单的处理程序

-module(handler).
-behaviour(cowboy_http_handler).
-export([init/3,handle/2,terminate/3]).

init({tcp, http}, Req, _Opts) ->
  {ok, Req, undefined_state}.

handle(Req, State) ->
  Body = <<"<h1>Test</h1>">>,
  {ok, Req2} = cowboy_req:reply(200, [], Body, Req),
  {ok, Req2, State}.

terminate(_Reason, _Req, _State) ->
  ok.
Run Code Online (Sandbox Code Playgroud)

此代码可以处理GET请求.但是我如何处理HTTP POST请求?

Dan*_*nko 7

您的代码使用任何HTTP方法处理请求.如果要处理特定的HTTP请求方法,则必须在回调句柄/ 2中测试方法名称.在这里你可以看到一个简单的例子:

handle(Req, State) ->
    {Method, Req2} = cowboy_req:method(Req),
    case Method of
        <<"POST">> ->
            Body = <<"<h1>This is a response for POST</h1>">>;
        <<"GET">> ->
            Body = <<"<h1>This is a response for GET</h1>">>;
        _ ->
            Body = <<"<h1>This is a response for other methods</h1>">>
    end,
    {ok, Req3} = cowboy_req:reply(200, [], Body, Req2),
    {ok, Req3, State}.
Run Code Online (Sandbox Code Playgroud)

要获取POST请求的内容,您可以使用函数cowboy_req:body_qs/2.在牛仔中还有其他用于处理HTTP请求体的函数.查看文档并选择方便的方式.