我有一个非常简单的“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 ,发现Data
和Json
变量都是[]
在我使用 cURL 发出请求之后。
另一方面,当我用 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
值。