私は非常に単純な「hello world」Mochiweb サーバーを持っています (紹介を始めたばかりです)。これは JSON 要求を受け取り、それを送り返します。
'POST' ->
case Path of
"dummy" ->
Data = Req:parse_post(),
Json = proplists:get_value("json", Data),
Struct = mochijson2:decode(Json),
Action_value = struct:get_value(<<"action">>, Struct),
Action = list_to_atom(binary_to_list(A)),
Result = [got_json_request, Action],
DataOut = mochijson2:encode(Result),
Req:ok({"application/json",[],[Result]});
問題は、cURL でリクエストを送信しようとすると失敗することです。
curl -i -H "Content-Type: application/json" -H "Accept: application/json" -X POST -d '{"action":"dummy"}' http://localhost:8080/dummy
Mochiweb のログは非常に読みにくいですが、私が理解しているように、エラーは次の行で発生します。
Json = proplists:get_value("json", Data)
io:format
コードにいくつかの s を入れたところ、cURL でリクエストを行った後にData
とJson
変数の両方があることがわかりました。[]
一方、cURL で非常に単純なリクエストを行うと、次のようになります。
curl -d '{"action":"dummy"}' http://localhost:8080/dummy
Data と Json の両方が[{"{\"action\":\"dummy\"}",[]}]
ですが、その場合、行Struct = mochijson2:decode(Json)
は失敗します。
奇妙な理由で、ヘッダーに「application/json」値がある場合、Mochiweb は POST 要求で JSON データを認識しません。
問題は、JSON データを使用して Mochiweb サーバーに対して正しい POST 要求を行うにはどうすればよいかということです。
編集:Json
変数にはundefined
値があります。