简单的JSON请求,带有cURL到Mochiweb



我有一个非常简单的'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,发现在使用 cURL 发出请求后,DataJson变量都[]

另一方面,当我使用 cURL 执行非常简单的请求时:

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

数据和 Json 都是[{"{"action":"dummy"}",[]}]的,但在这种情况下,行Struct = mochijson2:decode(Json)失败。

出于某种奇怪的原因,Mochiweb在POST请求中看不到JSON数据,以防标头具有"application/json"值。

所以,问题是:如何使用 JSON 数据向 Mochiweb 服务器发出正确的 POST 请求?

编辑:Json变量具有undefined值。

尝试类似

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

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

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

当你将一个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

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

相关内容

  • 没有找到相关文章

最新更新