This commit is contained in:
parent
aa2ff7b2f0
commit
2f3113f55d
11742 changed files with 1223940 additions and 0 deletions
50
unikernel/duniverse/httpun/examples/async/async_https_get.ml
Normal file
50
unikernel/duniverse/httpun/examples/async/async_https_get.ml
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
open Core
|
||||
open Async
|
||||
|
||||
open Httpun
|
||||
open Httpun_async
|
||||
|
||||
let response_handler finished response response_body =
|
||||
match response with
|
||||
| { Response.status = `OK; _ } ->
|
||||
let rec on_read bs ~off ~len =
|
||||
Bigstring.to_string ~pos:off ~len bs |> print_endline;
|
||||
Body.Reader.schedule_read response_body ~on_read ~on_eof
|
||||
and on_eof () = (Ivar.fill [@ocaml.alert "-deprecated"]) finished () in
|
||||
Body.Reader.schedule_read response_body ~on_read ~on_eof;
|
||||
| response ->
|
||||
Format.fprintf Format.std_formatter "%a\n%!" Response.pp_hum response;
|
||||
Core.exit 1
|
||||
;;
|
||||
|
||||
let error_handler _ = assert false
|
||||
|
||||
let main port host () =
|
||||
let where_to_connect = Tcp.Where_to_connect.of_host_and_port { host; port } in
|
||||
let finished = Ivar.create () in
|
||||
Tcp.connect_sock where_to_connect
|
||||
>>= fun socket ->
|
||||
Client.SSL.create_connection_with_default socket >>= fun conn ->
|
||||
let headers = Headers.of_list [ "host", host ] in
|
||||
let request_body =
|
||||
Client.SSL.request
|
||||
~error_handler
|
||||
~response_handler:(response_handler finished)
|
||||
conn
|
||||
(Request.create ~headers `GET "/")
|
||||
in
|
||||
Body.Writer.close request_body;
|
||||
Ivar.read finished
|
||||
;;
|
||||
|
||||
let () =
|
||||
Command.async_spec
|
||||
~summary:"Start a hello world Async server"
|
||||
Command.Spec.(empty +>
|
||||
flag "-p" (optional_with_default 443 int)
|
||||
~doc:"int destination port"
|
||||
+>
|
||||
flag "-h" (required string)
|
||||
~doc:"string destination host"
|
||||
) main
|
||||
|> Command_unix.run
|
||||
Loading…
Add table
Add a link
Reference in a new issue