Quel est le meilleur module pour HttpRequest en OCaml?

je souhaite utiliser OCaml pour accéder à L'API Yahoo Finance. Essentiellement, ce sera juste un tas de requêtes HTTP pour obtenir des devis de Yahoo Finance.

quel module je dois utiliser?

je souhaite avoir des requêtes HTTP async.

19
demandé sur Jens Erat 2013-01-03 10:34:41

2 réponses

il y a des possibilités en utilisant lwt:

  • ocsigen a une implémentation assez complète et un peu complexe
  • cohttp est un peu plus simple mais manque de pièces utiles

en utilisant opam pour l'installer:

$ opam install ocsigenserver cohttp

Par exemple, dans un toplevel:

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

et en utilisant 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

notez que la mise en œuvre du programme cohttp pour la rue jane la bibliothèque async est également disponible

23
répondu Pierre Chambart 2013-01-13 14:32:12

Juste pour mémoire, il y a aussi ocurl avec curl multi prise en charge des API.

3
répondu ygrek 2013-01-09 13:49:38