local vtc_port = 0
local vtc_port2 = 0
+local vtc_port3 = 0
core.register_service("fakeserv", "http", function(applet)
vtc_port = applet.headers["vtcport"][0]
vtc_port2 = applet.headers["vtcport2"][0]
+ vtc_port3 = applet.headers["vtcport3"][0]
core.Info("APPLET START")
local response = "OK"
applet:add_header("Server", "haproxy/webstats")
local httpclient2 = core.httpclient()
local response2 = httpclient2:post{url="http://127.0.0.1:" .. vtc_port2, body=body}
+ core.Info("Third httpclient request")
+ local httpclient3 = core.httpclient()
+ local response3 = httpclient3:get{url="http://127.0.0.1:" .. vtc_port3, headers={ [ "Host" ] = { "foobar.haproxy.local" } }}
+
end
core.register_task(cron)
expect req.bodylen == 54000
} -start
+server s3 {
+ rxreq
+ txresp -bodylen 54000
+ expect req.method == "GET"
+ expect req.http.host == "foobar.haproxy.local"
+} -start
+
+
haproxy h1 -conf {
global
lua-load ${testdir}/lua_httpclient.lua
} -start
client c0 -connect ${h1_fe1_sock} {
- txreq -url "/" -hdr "vtcport: ${s1_port}" -hdr "vtcport2: ${s2_port}"
+ txreq -url "/" -hdr "vtcport: ${s1_port}" -hdr "vtcport2: ${s2_port}" -hdr "vtcport3: ${s3_port}"
rxresp
expect resp.status == 200
} -run
server s1 -wait
server s2 -wait
+server s3 -wait
int err_code = 0;
struct ist meth_ist, vsn;
unsigned int flags = HTX_SL_F_VER_11 | HTX_SL_F_NORMALIZED_URI | HTX_SL_F_HAS_SCHM;
+ int i;
+ int foundhost = 0;
if (meth >= HTTP_METH_OTHER)
goto error;
}
sl->info.req.meth = meth;
- /* Add Host Header from URL */
- if (!htx_add_header(htx, ist("Host"), ist("h")))
- goto error;
- if (!http_update_host(htx, sl, url))
- goto error;
+ for (i = 0; hdrs && hdrs[i].n.len; i++) {
+ /* Don't check the value length because a header value may be empty */
+ if (isttest(hdrs[i].v) == 0)
+ continue;
+
+ if (isteqi(hdrs[i].n, ist("host")))
+ foundhost = 1;
- /* add the headers and EOH */
- if (hdrs) {
- if (!htx_add_all_headers(htx, hdrs))
+ if (!htx_add_header(htx, hdrs[i].n, hdrs[i].v))
goto error;
- } else {
- if (!htx_add_endof(htx, HTX_BLK_EOH))
+ }
+
+ if (!foundhost) {
+ /* Add Host Header from URL */
+ if (!htx_add_header(htx, ist("Host"), ist("h")))
+ goto error;
+ if (!http_update_host(htx, sl, url))
goto error;
}
+ if (!htx_add_endof(htx, HTX_BLK_EOH))
+ goto error;
+
if (isttest(payload)) {
/* add the payload if it can feat in the buffer, no need to set
* the Content-Length, the data will be sent chunked */