erlang - Cowboy HTTP POST 处理程序

标签 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.

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

最佳答案

您的代码可以使用任何 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}.

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

关于erlang - Cowboy HTTP POST 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20347842/

相关文章:

Erlang编译: mixed of "HiPE object code" and "opcode"?

erlang - 如何从 Cowboy 获取 http 参数?

http - Web 服务器容忍高客户端轮询率 : Cowboy vs. Yaws Web 服务器

Emacs 23 + Erlang + Distel

Erlang和运行时记录限制

variables - Erlang 中的匿名变量

rabbitmq - 无法启动RabbitMQ : undefined function rabbitmqctl_escript:main/1

erlang - Erlang 日志中未知的 ca

elixir - Elixir shell 中的 Application.stop(...)

elixir - 在 Phoenix/Plug/Cowboy 中重写 URL?