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 を入れたところ、cURL でリクエストを行った後にDataJson変数の両方があることがわかりました。[]

一方、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

This is not about POST nor get. It's about how you post your data to send to your server

When you send a json data to server, you need to make it as key=value

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

Therefore, if you want to post json as '{"action":"dummy"}', for GET request

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

For POST request as a file,

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

of course, when you send as a file, you need to read the posted file from the server side.

于 2012-05-08T14:01:04.930 に答える
0

の線に沿って何かを試してください

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

少なくともメソッド post とコンテンツ タイプをこれより先に確保する必要があります。

于 2012-05-04T19:06:20.673 に答える