sig
  type error = Socket | Response | UrlDecoding
  exception Error of Http.error
  val string_of_error : Http.error -> string
  type connection = Unix.file_descr
  val user_agent : string
  val url_decode : ?plus:bool -> string -> string
  val url_encode : ?plus:bool -> string -> string
  val url_split_host_port : string -> string * int option * string
  val http_sanitize : string -> string
  val is_url : string -> bool
  val dirname : string -> string
  val args_split : string -> (string, string) Hashtbl.t
  val connect : ?bind_address:string -> string -> int -> Http.connection
  val disconnect : Http.connection -> unit
  type status = string * int * string
  type headers = (string * string) list
  val read_crlf :
    ?log:(string -> unit) ->
    ?max:int -> timeout:float -> Http.connection -> string
  val request :
    ?log:(string -> unit) ->
    timeout:float ->
    Http.connection ->
    string -> (string * int * string) * (string * string) list
  val get :
    ?headers:(string * string) list ->
    ?log:(string -> unit) ->
    timeout:float ->
    Http.connection ->
    string ->
    int -> string -> (string * int * string) * (string * string) list
  val post :
    ?headers:(string * string) list ->
    ?log:(string -> unit) ->
    timeout:float ->
    string ->
    Http.connection ->
    string ->
    int -> string -> (string * int * string) * (string * string) list
  val read :
    ?log:(string -> unit) ->
    timeout:float -> Http.connection -> int option -> string
  type request = Get | Post of string
  val full_request :
    ?headers:(string * string) list ->
    ?port:int ->
    ?log:(string -> unit) ->
    timeout:float ->
    host:string ->
    url:string ->
    request:Http.request ->
    unit -> (string * int * string) * (string * string) list * string
end