| 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.
|
|
|