package tiny_httpd
Minimal HTTP server using good old threads
Install
Dune Dependency
Authors
Maintainers
Sources
v0.1.tar.gz
md5=691a48a4c2b9c52a8c48a5e058957181
sha512=ba2728e49b409468e3c5d665010afbfbc5651209df2ccf548a0125f7c5f9e0f29517ef42be48ab62f9dbc3ee300724d4dc9bd4f6f4261d351f2474c947d07810
Description
README
Tiny_httpd
Minimal HTTP server using good old threads and Scanf
for routing.
Free from all forms of ppx
, async monads, etc.
The basic echo server from src/examples/echo.ml
:
module S = Tiny_httpd
let () =
let server = S.create () in
(* say hello *)
S.add_path_handler ~meth:`GET server
"/hello/%s@/" (fun name _req -> S.Response.make_ok ("hello " ^name ^"!\n"));
(* echo request *)
S.add_path_handler server
"/echo" (fun req -> S.Response.make_ok (Format.asprintf "echo:@ %a@." S.Request.pp req));
Printf.printf "listening on http://%s:%d\n%!" (S.addr server) (S.port server);
match S.run server with
| Ok () -> ()
| Error e -> raise e
$ dune exec src/examples/echo.exe &
listening on http://127.0.0.1:8080
# the path "hello/name" greets you.
$ curl -X GET http://localhost:8080/hello/quadrarotaphile
hello quadrarotaphile!
# the path "echo" just prints the request.
$ curl -X GET http://localhost:8080/echo --data "howdy y'all"
echo:
{meth=GET;
headers=Host: localhost:8080
User-Agent: curl/7.66.0
Accept: */*
Content-Length: 10
Content-Type: application/x-www-form-urlencoded;
path="/echo"; body="howdy y'all"}
http_of_dir
Similar to python -m http.server
, a simple program http_of_dir
is provided. It serves files from the current directory.
$ http_of_dir . -p 8080 &
$ curl -X GET http://localhost:8080
...
<html list of current dir>
...
Why?
Why not? If you just want a super basic local server (perhaps for exposing data from a local demon, like Cups or Syncthing do), no need for a ton of dependencies or high scalability libraries.
Documentation
See https://c-cube.github.io/tiny_httpd
License
MIT.
Dependencies (3)
-
ocaml
>= "4.03.0"
- base-threads
-
dune
>= "1.1"
Dev Dependencies (1)
-
odoc
with-doc
Used by (3)
- html_of_jsx
-
owi
>= "0.2"
- server-reason-react
Conflicts
None
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
On This Page