mirror of
https://github.com/c-cube/ezcurl.git
synced 2025-12-06 03:05:31 -05:00
Refactor mk_res
This commit is contained in:
parent
ddd750cc0c
commit
8d783dc626
1 changed files with 30 additions and 31 deletions
|
|
@ -330,33 +330,6 @@ end
|
||||||
|
|
||||||
exception Parse_error of curl_error
|
exception Parse_error of curl_error
|
||||||
|
|
||||||
let mk_res (self : t) headers body : (_ response, _) result =
|
|
||||||
let split_colon s =
|
|
||||||
match String.index s ':' with
|
|
||||||
| exception Not_found ->
|
|
||||||
raise
|
|
||||||
(Parse_error (Curl.CURLE_CONV_FAILED, "header line without a ':': " ^ s))
|
|
||||||
| i ->
|
|
||||||
( String.sub s 0 i,
|
|
||||||
String.trim (String.sub s (i + 1) (String.length s - i - 1)) )
|
|
||||||
in
|
|
||||||
try
|
|
||||||
let code = Curl.get_httpcode self.curl in
|
|
||||||
let headers =
|
|
||||||
match headers with
|
|
||||||
| [] -> []
|
|
||||||
| _ :: tl ->
|
|
||||||
List.map split_colon tl (* first one is "http1.1 NNN <descr>" *)
|
|
||||||
in
|
|
||||||
let info =
|
|
||||||
{
|
|
||||||
ri_redirect_count = Curl.get_redirectcount self.curl;
|
|
||||||
ri_response_time = Curl.get_totaltime self.curl;
|
|
||||||
}
|
|
||||||
in
|
|
||||||
Ok { headers; code; body; info }
|
|
||||||
with Parse_error (e, msg) -> Error (e, Curl.strerror e ^ ": " ^ msg)
|
|
||||||
|
|
||||||
module Make (IO : IO) : S with type 'a io = 'a IO.t = struct
|
module Make (IO : IO) : S with type 'a io = 'a IO.t = struct
|
||||||
open IO
|
open IO
|
||||||
|
|
||||||
|
|
@ -394,6 +367,34 @@ module Make (IO : IO) : S with type 'a io = 'a IO.t = struct
|
||||||
mutable resp_headers_done: bool;
|
mutable resp_headers_done: bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mk_res (self : http_state_) body : (_ response, _) result =
|
||||||
|
let headers = List.rev self.resp_headers in
|
||||||
|
let split_colon s =
|
||||||
|
match String.index s ':' with
|
||||||
|
| exception Not_found ->
|
||||||
|
raise
|
||||||
|
(Parse_error (Curl.CURLE_CONV_FAILED, "header line without a ':': " ^ s))
|
||||||
|
| i ->
|
||||||
|
( String.sub s 0 i,
|
||||||
|
String.trim (String.sub s (i + 1) (String.length s - i - 1)) )
|
||||||
|
in
|
||||||
|
try
|
||||||
|
let code = Curl.get_httpcode self.client.curl in
|
||||||
|
let headers =
|
||||||
|
match headers with
|
||||||
|
| [] -> []
|
||||||
|
| _ :: tl ->
|
||||||
|
List.map split_colon tl (* first one is "http1.1 NNN <descr>" *)
|
||||||
|
in
|
||||||
|
let info =
|
||||||
|
{
|
||||||
|
ri_redirect_count = Curl.get_redirectcount self.client.curl;
|
||||||
|
ri_response_time = Curl.get_totaltime self.client.curl;
|
||||||
|
}
|
||||||
|
in
|
||||||
|
Ok { headers; code; body; info }
|
||||||
|
with Parse_error (e, msg) -> Error (e, Curl.strerror e ^ ": " ^ msg)
|
||||||
|
|
||||||
let http_setup_ ?client ?(config = Config.default) ?range ?content
|
let http_setup_ ?client ?(config = Config.default) ?range ?content
|
||||||
?(headers = []) ~url ~meth () : http_state_ =
|
?(headers = []) ~url ~meth () : http_state_ =
|
||||||
let headers = ref headers in
|
let headers = ref headers in
|
||||||
|
|
@ -477,9 +478,7 @@ module Make (IO : IO) : S with type 'a io = 'a IO.t = struct
|
||||||
let rec loop i =
|
let rec loop i =
|
||||||
IO.perform st.client.curl >>= function
|
IO.perform st.client.curl >>= function
|
||||||
| Curl.CURLE_OK ->
|
| Curl.CURLE_OK ->
|
||||||
let r =
|
let r = mk_res st (Buffer.contents body) in
|
||||||
mk_res st.client (List.rev st.resp_headers) (Buffer.contents body)
|
|
||||||
in
|
|
||||||
if st.do_cleanup then Curl.cleanup st.client.curl;
|
if st.do_cleanup then Curl.cleanup st.client.curl;
|
||||||
return r
|
return r
|
||||||
| Curl.CURLE_AGAIN when i > 1 -> loop (i - 1) (* try again *)
|
| Curl.CURLE_AGAIN when i > 1 -> loop (i - 1) (* try again *)
|
||||||
|
|
@ -504,7 +503,7 @@ module Make (IO : IO) : S with type 'a io = 'a IO.t = struct
|
||||||
let rec loop i =
|
let rec loop i =
|
||||||
IO.perform st.client.curl >>= function
|
IO.perform st.client.curl >>= function
|
||||||
| Curl.CURLE_OK ->
|
| Curl.CURLE_OK ->
|
||||||
let r = mk_res st.client (List.rev st.resp_headers) () in
|
let r = mk_res st () in
|
||||||
write_into#on_close ();
|
write_into#on_close ();
|
||||||
if st.do_cleanup then Curl.cleanup st.client.curl;
|
if st.do_cleanup then Curl.cleanup st.client.curl;
|
||||||
return r
|
return r
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue