parrotcode: HTTP server | |
Contents | Examples |
examples/io/httpd.pir - HTTP server
$ ./parrot examples/io/httpd.pir
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.
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
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.
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.
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.
RFC2616
Original author is Markus Amsler - <markus.amsler@oribi.org> The code was heavily hacked by bernhard and leo.
|