From: William Lallemand Date: Fri, 4 Jul 2025 07:05:21 +0000 (+0200) Subject: MEDIUM: httpclient: add a Content-Length when the payload is known X-Git-Tag: v3.3-dev3~41 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f07f0ee21c94f269fb09b28f2ce553eb59d03118;p=thirdparty%2Fhaproxy.git MEDIUM: httpclient: add a Content-Length when the payload is known This introduce a change of behavior in the httpclient API. When generating a request with a payload buffer, the size of the buffer payload is known and does not need to be streamed in chunks. This patch force to sends payload buffer using a Content-Length header in the request, however the behavior does not change if a callback is still used instead of a buffer. --- diff --git a/src/http_client.c b/src/http_client.c index 0bd992d78..f061b230b 100644 --- a/src/http_client.c +++ b/src/http_client.c @@ -136,13 +136,20 @@ int httpclient_req_gen(struct httpclient *hc, const struct ist url, enum http_me goto error; } + if (isttest(payload) && istlen(payload)) { + /* add the Content-Length of the payload when not using the callback */ + + if (!htx_add_header(htx, ist("Content-Length"), ist(ultoa(istlen(payload))))) + goto error; + + } if (!htx_add_endof(htx, HTX_BLK_EOH)) goto error; if (isttest(payload) && istlen(payload)) { - /* add the payload if it can feat in the buffer, no need to set - * the Content-Length, the data will be sent chunked */ + /* add the payload if it can feat in the buffer, Content-Length was added before */ + if (!htx_add_data_atonce(htx, payload)) goto error; }