0

我有一个非常简单的“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 ,发现DataJson变量都是[]在我使用 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值。

4

2 回答 2

0

尝试一些类似的东西

Data = Req:recv_body(),
Json = mochijson2:decode(Data),
...

您至少应该在此之前确保方法 post 和内容类型。

于 2012-05-04T19:06:20.673 回答
0

这与 POST 或获取无关。这是关于您如何发布数据以发送到您的服务器

向服务器发送 json 数据时,需要将其设为 key=value

 curl -d "key=value" "http://your.domain.com/path"

因此,如果您想将 json 发布为 '{"action":"dummy"}',对于 GET 请求

 curl -d "json='{\"action\":\"dummy\"}'" http://localhost:8080/dummy

对于作为文件的 POST 请求,

curl -F "json=@filename.json" http://localhost:8080/dummy

当然,当您作为文件发送时,您需要从服务器端读取发布的文件。

于 2012-05-08T14:01:04.930 回答