Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cookbook httpclient #2402

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions data/cookbook/http-misc/00-cohttp.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
---
packages:
- name: "lwt"
tested_version: "5.7.0"
used_libraries:
- lwt
- lwt.unix
- name: "lwt_ppx"
tested_version: "2.1.0"
used_libraries:
- lwt_ppx
- name: "cohttp"
tested_version: "5.3.1"
used_libraries:
- cohttp
- name: "cohttp-lwt-unix"
tested_version: "5.3.0"
used_libraries:
- cohttp-lwt-unix
discussion: |
- **About `cohttp`:** The `cohttp` provides a client and a server implementation of HTTP(S)
- **Reference:** The `cohttp` package is documented on the [ocaml-cohttp page](https://github.com/mirage/ocaml-cohttp).
---

let url = "https://www.ocaml.org"

(* The `get` function fetch the ressource. The status code is analysed, and if all is ok, return the body of the answer. If not, the reason of the failure *)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
(* The `get` function fetch the ressource. The status code is analysed, and if all is ok, return the body of the answer. If not, the reason of the failure *)
(* The `get` function fetches the resource. The status code is analysed, and if all is ok, returns the body of the answer. If not, it returns the reason of the failure *)


let http_get url =
let%lwt (resp,body) = Cohttp_lwt_unix.Client.get
(Uri.of_string url) in
let code = resp
|> Cohttp.Response.status
|> Cohttp.Code.code_of_status in
if Cohttp.Code.is_success code
then
let%lwt b = Cohttp_lwt.Body.to_string body in
Lwt.return (Ok b)
else
Lwt.return (Error (Cohttp.Code.reason_phrase_of_code code))

(* Let's call the `http_get` function. *)
let () =
Lwt_main.run @@
match%lwt http_get url with
| Error str ->
Printf.printf "%s:fail\n" url;
Printf.printf "Error: %s\n" str;
Lwt.return ()
| Ok result ->
Printf.printf "%s:succed\n" url;
print_string result;
Lwt.return ()
2 changes: 2 additions & 0 deletions data/cookbook/tasks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,8 @@ categories:
slug: download-file-to-temporary-dir
- title: Make a Partial Download with HTTP Range Header
slug: make-partial-download-with-http-range-header
- title: Miscellaneous
slug: http-misc
- title: Dealing with HTML
tasks:
- title: Render a HTML Template
Expand Down
Loading