J'ai un très simple « bonjour » serveur Mochiweb (je viens de commencer mon introduction en elle), qui prend une demande JSON et renvoie:Demande simple JSON avec cURL à Mochiweb
'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]});
La chose est que lorsque je tente de faire une demande avec cURL il échoue:
curl -i -H "Content-Type: application/json" -H "Accept: application/json" -X POST -d '{"action":"dummy"}' http://localhost:8080/dummy
le journal Mochiweb est assez difficile à lire, mais que je comprends l'erreur se produit sur cette ligne:
Json = proplists:get_value("json", Data)
J'ai mis un couple de io:format
s dans le code et a découvert que les deux Data
et Json
sont []
après avoir fait une demande avec cURL.
D'autre part, quand je fais une demande très simple avec cURL:
curl -d '{"action":"dummy"}' http://localhost:8080/dummy
les données et JSON sont [{"{\"action\":\"dummy\"}",[]}]
, mais dans ce cas, la ligne Struct = mochijson2:decode(Json)
échoue.
Pour une raison étrange, Mochiweb ne voit pas les données JSON dans la requête POST dans le cas où l'en-tête a la valeur "application/json". Donc, la question est: Comment faire une requête POST correcte avec des données JSON à un serveur Mochiweb?
La variable EDIT: Json
a la valeur undefined
.
Indépendant, mais list_to_atom est un comportement très dangereux à prendre sans s'assurer qu'il est restreint; Il y a un nombre fini d'atomes qui peuvent exister dans une instance particulière d'erlang - même si c'est très grand. – Greyson
Les atomes ne sont pas collectés non plus, donc ils existent pour la durée de vie de l'application. –