package ezcurl
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=26eda208be72d746eafbfe47f264850ae619e811b8c3165e7684d7a9295541a1
sha512=841d88cd4e7e6449cf17dc4626533856a13c81f96e81305be4773a0d2e5eba524950cd5280da6ff6390c386823c1bdbe671d946f643d26c2ea600b4b1cd66531
README.md.html
EZCurl
A simple wrapper around OCurl, for easy tasks around http.
project goals
be as simple to use as possible.
be as reliable as possible (work is done by cURL and the ocurl bindings anyway).
stable API with few dependencies, so that user code compiles without breakage for a long time.
Installation
for the synchronous library:
opam install ezcurl
for the lwt-based library:
opam install ezcurl-lwt
(depends onezcurl
)
Usage
A small web crawler can be found in examples/argiope
. It's very incomplete and naive but demonstrates basic usage of Ezcurl_lwt.get
.
Synchronous API
The library lives in a module Ezcurl
, which wraps Curl.t
with functions such as get
that combine many different low level API calls into one. It also follows redirections by default, and returns a Ezcurl.response
object that contains the body, headers, and error code.
# #require "ezcurl";;
# let url = "https://curl.haxx.se/";;
val url : string = "https://curl.haxx.se/"
# let res = Ezcurl.get ~url ();;
...
# let content = match res with Ok c -> c | Error (_,s) -> failwith s;;
val content : Ezcurl_core.response =
...
# content.Ezcurl.code;;
- : int = 200
It is also possible to create a client with Ezcurl.make()
and re-use it across calls with the optional parameter client
.
Lwt API
Using ezcurl-lwt
, a module Ezcurl_lwt
becomes available, with functions that are similar to the ones in Ezcurl
but are non blocking. This makes it easy to run several queries in parallel:
# #require "ezcurl-lwt";;
# let urls = [
"https://en.wikipedia.org/wiki/CURL";
"https://en.wikipedia.org/wiki/OCaml";
"https://curl.haxx.se/";
];;
val urls : string list =
["https://en.wikipedia.org/wiki/CURL";
"https://en.wikipedia.org/wiki/OCaml"; "https://curl.haxx.se/"]
# open Lwt.Infix;;
# let codes =
List.map (fun url -> Ezcurl_lwt.get ~url ()) urls
|> Lwt_list.map_p
(fun fut ->
fut >>= function
| Ok r -> Lwt.return r.Ezcurl_lwt.code
| Error e -> Lwt.fail (Failure "oh no"))
;;
...
# codes;;
- : int list = [200; 200; 200]