fix: correctly set size of payload for POST

close #12
This commit is contained in:
Simon Cruanes 2023-02-28 11:06:39 -05:00
parent 63392ea36b
commit 91cfbc94ad
No known key found for this signature in database
GPG key ID: EBFFF6F283F3A2B4

View file

@ -311,15 +311,22 @@ module Make(IO : IO)
in in
_apply_config self config; _apply_config self config;
opt_iter range ~f:(fun s -> Curl.set_range self s); opt_iter range ~f:(fun s -> Curl.set_range self s);
(* TODO: ability to make content a stream with a `read` function *) (* TODO: ability to make content a stream with a `read` function *)
opt_iter content opt_iter content
~f:(fun content -> ~f:(fun content ->
Curl.set_readfunction self (content_read_fun_ content); Curl.set_readfunction self (content_read_fun_ content);
(* also set size if known *) (* also set size if known *)
match content_size_ content with match content_size_ content, meth with
| None -> headers := ("transfer-encoding", "chunked") :: !headers | None, _ ->
| Some size -> Curl.set_infilesize self size Printf.eprintf "size not known\n%!";
headers := ("transfer-encoding", "chunked") :: !headers
| Some size , POST _ ->
Curl.set_postfieldsize self size;
| Some size, _ ->
Curl.set_infilesize self size
); );
(* local state *) (* local state *)
let tries = max tries 1 in (* at least one attempt *) let tries = max tries 1 in (* at least one attempt *)
let body = Buffer.create 64 in let body = Buffer.create 64 in
@ -329,7 +336,8 @@ module Make(IO : IO)
begin match meth with begin match meth with
| POST [] when (content <> None) -> | POST [] when (content <> None) ->
Curl.set_post self true Curl.set_post self true
| POST l -> Curl.set_httppost self l; | POST l ->
Curl.set_httppost self l;
| GET -> Curl.set_httpget self true; | GET -> Curl.set_httpget self true;
| PUT -> | PUT ->
Curl.set_customrequest self "PUT"; Curl.set_customrequest self "PUT";
@ -341,6 +349,7 @@ module Make(IO : IO)
| TRACE -> Curl.set_customrequest self "TRACE" | TRACE -> Curl.set_customrequest self "TRACE"
| PATCH -> Curl.set_customrequest self "PATCH" | PATCH -> Curl.set_customrequest self "PATCH"
end; end;
_set_headers self !headers; _set_headers self !headers;
Curl.set_headerfunction self Curl.set_headerfunction self
(fun s0 -> (fun s0 ->