3

Erlangを学び始めました。HTTP POST 経由で送信されるファイルを受信できる単純なカウボーイ ベースの HTTP サーバーを作成したいと考えています。だから私は単純なハンドラーを作成します:

-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 リクエストを処理するにはどうすればよいでしょうか?

4

4 に答える 4

8

コードは、任意の 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 を使用できます。カウボーイで HTTP リクエストの本文を処理するための関数は他にもあります。ドキュメントを確認して、都合のよい方法を選択してください。

于 2013-12-03T10:27:47.523 に答える