Harbor as HTTP server
The harbor server can be used as a HTTP server. You
can use the function
harbor.http.register to register
HTTP handlers. Its parameters are are follow:
portis the port where to receive incoming connections
methodis for the http method (or verb), one of:
uriis used to match requested uri. Perl regular expressions are accepted.
handleris the function used to process requests.
handler function has type:
protocolis the HTTP protocol used by the client. Currently, one of
datais the data passed during a POST request
headersis the list of HTTP headers sent by the client
stringis the (unparsed) uri requested by the client, e.g.:
handler function returns HTTP and HTML data to be sent to the client,
\r\n should always be used for line return
in HTTP content)
For convenience, a
http_response function is provided to
create a HTTP response string. It has the following type:
protocolis the HTTP protocol of the response (default
codeis the response code (default
headersis the response headers. It defaults to
but an appropriate
"Content-Length"header is added if not set by the user and
datais not empty.
datais an optional response data (default
Thess functions can be used to create your own HTTP interface. Some examples are:
Redirect Icecast's pages
Some source clients using the harbor may also request pages that are served by an icecast server, for instance listeners statistics. In this case, you can register the following handler:
Another alternative, less recommended, is to directly fetch the page's content from the Icecast server:
This method is not recommended because some servers may not
close the socket after serving a request, causing
liquidsoap to hang.
You can use harbor to register HTTP services to
fecth/set the metadata of a source. For instance,
using the JSON export function
Once the script is running,
a GET/POST request for
/getmeta at port
returns the following:
Which can be used with AJAX-based backends to fetch the current
metadata of source
insert_metadata, you can register a GET handler that
updates the metadata of a given source. For instance:
Now, a request of the form
will update the metadata of source
can use this handler, for instance, in a custom HTML form.
When using harbor's HTTP server, please be warned that the server is not meant to be used under heavy load. Therefore, it should not be exposed to your users/listeners if you expect many of them. In this case, you should use it as a backend/middle-end and have some kind of caching between harbor and the final user. In particular, the harbor server is not meant to server big files because it loads their entire content in memory before sending them. However, the harbor HTTP server is fully equipped to serve any kind of CGI script.