mte/unikernel/duniverse/httpun/examples/async/async_get_pipelined.ml
2025-11-11 02:07:51 +01:00

55 lines
1.6 KiB
OCaml

open! Core
open Async
open Httpun
open Httpun_async
let error_handler _ = assert false
let main port host () =
let where_to_connect = Tcp.Where_to_connect.of_host_and_port { host; port } in
Tcp.connect_sock where_to_connect
>>= fun socket ->
let finished = Ivar.create () in
let response_handler =
Httpun_examples.Client.print
~on_eof:((Ivar.fill [@ocaml.alert "-deprecated"]) finished) in
let request_headers =
Request.create ~headers:(Headers.of_list [ "host", host ]) `GET "/"
in
Client.create_connection socket >>= fun connection ->
let request_body =
Client.request
connection
~response_handler
~error_handler
request_headers
in
let finished' = Ivar.create () in
let response_handler' =
Httpun_examples.Client.print ~on_eof:((Ivar.fill [@ocaml.alert "-deprecated"]) finished')
in
let request_body' =
Client.request
connection
~response_handler:response_handler'
~error_handler
request_headers
in
Body.Writer.close request_body';
Body.Writer.close request_body;
Async.Deferred.all_unit [Ivar.read finished; Ivar.read finished'] >>= fun () ->
Client.shutdown connection
;;
let () =
Command.async
~summary:"Start a hello world Async client"
Command.Param.(
map (both
(flag "-p" (optional_with_default 80 int)
~doc:"int destination port")
(anon ("host" %: string)))
~f:(fun (port, host) ->
(fun () -> main port host ())))
|> Command_unix.run