ocaml ocaml-batteries

¿Cuál es el mejor módulo para HttpRequest en OCaml?



ocaml-batteries (2)

Hay posibilidades usando lwt :

  • ocsigen tiene una implementación bastante completa y un poco compleja.
  • cohttp es un poco más simple pero carece de algunas partes útiles

utilizando opam para instalar:

$ opam install ocsigenserver cohttp

Por ejemplo, en un nivel superior:

try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH") with _ -> ();; #use "topfind";; #thread;; #require "ocsigenserver";; open Lwt (* a simple function to access the content of the response *) let content = function | { Ocsigen_http_frame.frame_content = Some v } -> Ocsigen_stream.string_of_stream 100000 (Ocsigen_stream.get v) | _ -> return "" (* launch both requests in parallel *) let t = Lwt_list.map_p Ocsigen_http_client.get_url [ "http://ocsigen.org/"; "http://stackoverflow.com/" ] (* maps the result through the content function *) let t2 = t >>= Lwt_list.map_p content (* launch the event loop *) let result = Lwt_main.run t2

y usando cohttp:

try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH") with _ -> ();; #use "topfind";; #require "cohttp.lwt";; open Lwt (* a simple function to access the content of the response *) let content = function | Some (_, body) -> Cohttp_lwt_unix.Body.string_of_body body | _ -> return "" (* launch both requests in parallel *) let t = Lwt_list.map_p Cohttp_lwt_unix.Client.get (List.map Uri.of_string [ "http://example.org/"; "http://example2.org/" ]) (* maps the result through the content function *) let t2 = t >>= Lwt_list.map_p content (* launch the event loop *) let v = Lwt_main.run t2

Tenga en cuenta que una implementación de cohttp para jane street async library también está disponible

Deseo usar OCaml para acceder a la API de Yahoo Finance. Esencialmente, serán solo un montón de solicitudes HTTP para obtener cotizaciones de Yahoo Finance.

¿Qué módulo debo usar?

Deseo tener peticiones HTTP asíncronas.