LinkHTTP Link header parsing per RFC 8288
This module parses Link headers commonly used for:
Per Recommendation #19: Parse Link headers for pagination support.
let rec fetch_all_pages session url acc =
let response = Requests.get session url in
let data = Response.body response |> Eio.Flow.read_all in
let acc = data :: acc in
match Link.next_url (Response.headers response) with
| Some next -> fetch_all_pages session next acc
| None -> List.rev acc let response = Requests.get session "https://api.example.com/items" in
let (first, prev, next, last) = Link.pagination (Response.headers response) in
match next with
| Some url -> Printf.printf "Next page: %s\n" url
| None -> print_endline "No more pages"val make :
uri:string ->
?rel:string ->
?title:string ->
?media_type:string ->
?hreflang:string ->
?params:(string * string) list ->
unit ->
tCreate a link value
val uri : t -> stringThe target URI
val rel : t -> string optionThe relation type (e.g., "next", "prev", "last", "self")
val title : t -> string optionHuman-readable title
val media_type : t -> string optionMedia type hint (from "type" parameter)
val hreflang : t -> string optionLanguage hint
val params : t -> (string * string) listAdditional parameters not covered by standard accessors
val parse : string -> t listParse a Link header value into a list of links. Handles multiple comma-separated links.
Extract and parse Link header from response headers. Returns empty list if no Link header present.
val pagination :
Headers.t ->
string option * string option * string option * string optionpagination headers extracts pagination links. Returns (first, prev, next, last) where each is optional.
Looks for links with rel="first", rel="prev", rel="next", rel="last".
val has_next : Headers.t -> boolCheck if there are more pages (next link exists)
val next_url : Headers.t -> string optionGet the next page URL if available
val prev_url : Headers.t -> string optionGet the previous page URL if available
val pp : Format.formatter -> t -> unitPretty-print a link in Link header format
val to_string : t -> stringConvert link to string representation
val src : Logs.Src.tLog source for link parsing operations