¿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.
Solo para el registro, también existe la compatibilidad con curl multi API .