NAME
examples/io/httpd.pir - HTTP server
SYNOPSIS
$ ./parrot examples/io/httpd.pir
DESCRIPTION
A very tiny HTTP-Server. It currently only understands the GET method. It's a nice way of testing pretty much all IO functions. By default (and not yet configurable) it binds to localhost:1234.
Serving Parrot Docs
If no filename is given it serves the HTML documentation in ./docs/html. Make sure you have built them with
$ make html
After that you can browse the documentation with
http://localhost:1234
which redirects to
http://localhost:1234/docs/html/index.html
Serving Other HTML Files
If a html file is present in the request, this file will be served:
http://localhost:1234/index.html
This will sent ./index.html from the directory, where httpd.pir was started.
CGI
If the file extension is .pir
or .pbc
, this file will be loaded below the directory cgi-pir and the function cgi_main
will be invoked with the query as an argument. This functions should return a plain string, which will be sent to the browser.
cgi_main is called with 3 arguments: a todo/reserved PMC, a string with the original query and a Hash, with key=value
items split by '+'
. key
and value
are already urldecoded
.
$ cat cgi-pir/foo.pir .sub cgi_main .param pmc reserved # TODO .param string query # all after '?': "foo=1+bar=A" .param pmc query_hash # Hash { foo=>'1', bar=>'A' } .return ("<p>foo</p>") # in practice use a full <html>doc</html> # unless serving XMLHttpRequest's .end
The browser request:
http://localhost:1234/foo.pir?foo=1+bar=%61
will serve, whatever the cgi_main
function returned.
TODO
make it work on W32/IE
Transcode the received string to ascii, in order to have access to an implemented 'index' op. Or just use unicode instead.
SEE ALSO
RFC2616
AUTHOR
Original author is Markus Amsler - <markus.amsler@oribi.org> The code was heavily hacked by bernhard and leo.