2016-08-01 4 views
0

Ich bekomme eine POST-Anfrage mit einer Zeichenfolge, die ein JSON-Objekt darstellt.Zugriff Körper der POST-Anfrage innerhalb Erlang httpd

Die _Env Liste sieht wie folgt aus:

[ 
    {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} 
] 

Mein Code-Server zu starten ist:

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"} 
     ]} 
    ]). 

Dann habe ich eine POST-Anforderung mit einigen Daten innerhalb dieser URL machen:

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

Und behandeln Sie diese Anfrage mit diesem Code:

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

Ich sehe, dass content_length 34, das eine richtige Anzahl sieht so die Daten in den kommenden zu sein scheint.

Nun, wie kann ich die gebuchten Daten extrahieren mit ihm etwas zu gehen?

+0

Können Sie bitte einen Code auf, wie/von hinzufügen, in dem Sie diese env Liste bekam? – Dogbert

+0

Bitte sehen Sie sich die Details an, die ich zu der Frage hinzugefügt habe. –

Antwort

1

Der POST-Text wird als drittes Argument an die Callback-Funktion übergeben, wie in der mod_esi docs erwähnt.

Dies kehrt der in Körper mit sich geführt verketteten:

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

Demo:

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

Ich vermute ja, aber das erste Mal habe ich es versucht, es hat aus irgendeinem Grund nicht funktioniert, vielleicht sind ein paar kleine Dinge, die ich vermisst habe, jetzt funktioniert wie erwartet. Vielen Dank! –