package http-mirage-client
HTTP client for MirageOS
Install
Dune Dependency
Authors
Maintainers
Sources
http-mirage-client-0.0.7.tbz
sha256=18a3c9295b4711bb7c2fddb6cbf1b5a1ec2a19504ee1fdf5dd769dcc898cb453
sha512=74e402d110b516c73039660575974f6b3664358eec82fdc1a40ba4995980d82fe2f6a5e422964953132c2c8470e92c400a49b94b51ff2586d7887cd6605f8e1d
Description
Published: 04 Sep 2024
README
An HTTP (http/1.1 or h2) client for MirageOS
This little library provides an HTTP client which can be usable inside a unikernel/MirageOS. It follows the same API as http-lwt-client which is pretty simple and uses:
happy-eyeballs to resolve domain-name
ocaml-tls for the TLS layer
paf for the HTTP protocol
This library wants to be easy to use and it is associated to a MirageOS device in order to facilite functoria
to compose everything (mainly the TCP/IP stack) according to the user's target and give a witness so as to be able to allocate a new connection to a peer and process the HTTP flow.
How to use it?
First, you need to describe a new http_client
device:
open Mirage
type http_client = HTTP_client
let http_client = typ HTTP_client
let http_client =
let connect _ modname = function
| [ _pclock; _tcpv4v6; ctx ] ->
Fmt.str {ocaml|%s.connect %s|ocaml} modname ctx
| _ -> assert false in
impl ~connect "Http_mirage_client.Make"
(pclock @-> tcpv4v6 @-> git_client @-> http_client)
Then, you can decide how to construct such device:
let stack = generic_stackv4v6 default_network
let dns = generic_dns_client stack
let tcp = tcpv4v6_of_stackv4v6 stack
let http_client =
(* XXX(dinosaure): it seems unconventional to use [git_happy_eyeballs] here
when we want to do HTTP requests only. The name was not so good and we
will fix that into the next release of the mirage tool. But structurally,
you don't bring anything related to Git. It's just a bad choice of name. *)
let happy_eyeballs = git_happy_eyeballs stack dns
(generic_happy_eyeballs stack dns) in
http_client $ default_posix_clock $ tcp $ happy_eyeballs
Finally, you can use the witness into your unikernel.ml
:
open Lwt.Infix
module Make (HTTP_client : Http_mirage_client.S) = struct
let start http_client =
let body_f _response acc data = Lwt.return (acc ^ data) in
Http_mirage_client.one_request http_client "https://mirage.io/" body_f ""
>>= function
| Ok (resp, body) -> ...
| Error _ -> ...
end
Dependencies (12)
-
x509
>= "1.0.0"
-
tls
>= "1.0.0"
-
h2
>= "0.10.0"
- httpaf
-
mimic-happy-eyeballs
>= "0.0.9"
-
lwt
>= "5.5.0"
-
tcpip
>= "7.0.0"
-
mirage-time
>= "3.0.0"
-
mirage-clock
>= "4.0.0"
-
paf
>= "0.2.0"
-
ocaml
>= "4.11.0"
-
dune
>= "2.3"
Dev Dependencies (4)
-
mirage-time-unix
with-test & >= "3.0.0"
-
mirage-crypto-rng
with-test
-
mirage-clock-unix
with-test & >= "4.0.0"
-
alcotest-lwt
with-test & >= "1.0.0"
Used by (1)
Conflicts
None
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
On This Page