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