2012-05-03 3 views
0

내가 가진 Mochiweb하는 매우 간단한 '안녕하세요'Mochiweb 서버 (난 그냥에 내 소개를 시작)하는 JSON 요청을 받아 다시 보내는 :간단한 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 -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 두 개를 넣었고 변수가 [] 인 경우 DataJson이 모두 cURL로 요청한 후 발견되었습니다. 한편

, 나는 컬 매우 간단한 요청을 수행

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

데이터 및 JSON 모두 [{"{\"action\":\"dummy\"}",[]}]하지만,이 경우 라인 Struct = mochijson2:decode(Json)이 실패합니다.

일부 이상한 이유로 Mochiweb은 헤더에 "application/json"값이있는 경우 POST 요청에서 JSON 데이터를 보지 않습니다.

그래서 질문입니다 : JSON 데이터를 사용하여 Mochiweb 서버에 올바른 POST 요청을하는 방법은 무엇입니까?

편집 : Json 변수의 값은 undefined입니다.

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

의 라인을 따라

+4

관련이 없지만 list_to_atom은 제한적이라는 보장없이 취할 매우 위험한 전술입니다. 매우 큰 경우에도 특정한 얼랑 인스턴스에 존재할 수있는 유한의 원자 수가 있습니다. – Greyson

+1

원자는 가비지 수집되지 않으므로 응용 프로그램의 수명 동안 존재합니다. –

답변

0

시도 뭔가 당신은 적어도 방법 게시물을 확인해야하고 내용은 앞서이의 입력합니다.

0

이것은 POST와 관련이 없습니다. 당신이 JSON을 게시 할 경우 그것은 당신이 서버에 JSON 데이터를 보낼 때 서버

에 보낼 당신이 당신의 데이터를 게시하는 방법에 대해, 당신은,

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

따라서 키 = 값으로 할 필요가 '{ "조치": "더미"}'로, GET 요청 파일로 POST 요청에 대한

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

를 들어,

curl -F "[email protected]" http://localhost:8080/dummy 

물론, 파일로 보낼 때 서버 측에서 게시 된 파일을 읽어야합니다.