У меня есть очень простой сервер Mochiweb «hello world» (я только начал знакомство с ним), который принимает запрос 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
и обнаружил, что обе переменные Data
и Json
являются []
после того, как я сделал запрос с помощью cURL.
С другой стороны, когда я делаю очень простой запрос с помощью cURL:
curl -d '{"action":"dummy"}' http://localhost:8080/dummy
и Data, и Json имеют значение [{"{\"action\":\"dummy\"}",[]}]
, но в этом случае строка Struct = mochijson2:decode(Json)
не работает.
По какой-то странной причине Mochiweb не видит данные JSON в запросе POST, если заголовок имеет значение «application/json».
Итак, вопрос: как мне сделать правильный запрос POST с данными JSON на сервер Mochiweb?
РЕДАКТИРОВАТЬ: переменная Json
имеет значение undefined
.