2016-08-01 6 views
0

Я получаю запрос POST со строкой, представляющей объект JSON.Доступ к телу запроса POST внутри Erlang httpd

_Env список выглядит следующим образом:

[ 
    {server_software,"inets/6.3"}, 
    {server_name,"XTR20160414"}, 
    {gateway_interface,"CGI/1.1"}, 
    {server_protocol,"HTTP/1.1"}, 
    {server_port,9000}, 
    {request_method,"POST"}, 
    {remote_addr,"127.0.0.1"}, 
    {peer_cert,undefined}, 
    {script_name,"/api/server:auth"}, 
    {http_host,"localhost:9000"}, 
    {http_accept,"application/json"}, 
    {http_content_type,"application/json"}, 
    {http_content_length,"34"}, 
    {http_connection,"close"}, 
    {content_length,34} 
] 

Мой код для запуска сервера является:

start() -> 
    mnesia:start(), 
    inets:start(httpd, [ 
     {modules, [ 
      mod_alias, 
      mod_auth, 
      mod_esi, 
      mod_actions, 
      mod_cgi, 
      mod_dir, 
      mod_get, 
      mod_head, 
      mod_log, 
      mod_disk_log 
     ]}, 
     {port, 9000}, 
     {server_name, "pokerspace"}, 
     {server_root, "misc/log"}, 
     {document_root, "misc/www"}, 
     {erl_script_alias, {"/api", [server]}}, 
     {error_log, "error.log"}, 
     {security_log, "security.log"}, 
     {transfer_log, "transfer.log"}, 
     {mime_types, [ 
      {"json", "application/json"}, 
      {"html", "text/html"}, 
      {"css", "text/css"}, 
      {"js", "application/x-javascript"} 
     ]} 
    ]). 

Тогда я сделать запрос POST на этот адрес с некоторыми данными внутри:

http://localhost:9000/api/server:auth 

И обработайте этот запрос с помощью этого кода:

auth(SessionID, _Env, _Input) -> 
    mod_esi:deliver(SessionID, [ 
     text_header(), 
     "authenticated" 
    ]). 

Я вижу, что content_length 34, который выглядит правильный номер, чтобы данные, кажется, приходит в.

Теперь, как извлечь отправленные данные пойти что-то с этим?

+0

Можете ли вы добавить некоторый код, как /, откуда вы получили этот список окр? – Dogbert

+0

Пожалуйста, посмотрите подробности, которые я добавил к вопросу. –

ответ

1

Корпус POST передается функции обратного вызова в качестве третьего аргумента, как указано в mod_esi docs.

Это вернет переданному в теле сцепляются с собой:

auth(SessionID, _Env, Input) -> 
    mod_esi:deliver(SessionID, [ 
     Input, Input 
    ]). 

Демо:

$ curl -XPOST -d "hi" http://localhost:9000/api/server:auth 
hihi 
+0

Я так предположил, но в первый раз, когда я попробовал, он почему-то не работал, может быть, некоторые мелкие вещи, которые я пропустил, теперь работает так, как ожидалось. Благодаря! –

Смежные вопросы