MINOR: httpclient/lua: add 'dst' optionnal field
The 'dst' optionnal field on a httpclient request can be used to set an alternative server address in the haproxy address format. Which means it could be use with unix@, ipv6@ etc. Should fix issue #1471.
This commit is contained in:
parent
7b2e0ee1c1
commit
4f4f2b7b5f
|
@ -1869,13 +1869,14 @@ HTTPClient class
|
|||
:param string request.url: Is a mandatory parameter for the request that contains the URL.
|
||||
:param string request.body: Is an optional parameter for the request that contains the body to send.
|
||||
:param table request.headers: Is an optional parameter for the request that contains the headers to send.
|
||||
:param table request.dst: Is an optional parameter for the destination in haproxy address format.
|
||||
:returns: Lua table containing the response
|
||||
|
||||
|
||||
.. code-block:: lua
|
||||
|
||||
local httpclient = core.httpclient()
|
||||
local response = httpclient:post{url="http://127.0.0.1", body=body}
|
||||
local response = httpclient:post{url="http://127.0.0.1", body=body, dst="unix@/var/run/http.sock"}
|
||||
|
||||
..
|
||||
|
||||
|
@ -1888,7 +1889,7 @@ HTTPClient class
|
|||
["content-type"] = { "text/html" },
|
||||
["cache-control"] = { "no-cache", "no-store" },
|
||||
},
|
||||
body = "<html><body><h1>invalid request<h1></body></html>"
|
||||
body = "<html><body><h1>invalid request<h1></body></html>",
|
||||
}
|
||||
..
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ local function cron()
|
|||
|
||||
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" } }}
|
||||
local response3 = httpclient3:get{url="http://127.0.0.1", dst = vtc_port3, headers={ [ "Host" ] = { "foobar.haproxy.local" } }}
|
||||
|
||||
end
|
||||
|
||||
|
|
|
@ -49,10 +49,15 @@ haproxy h1 -conf {
|
|||
mode http
|
||||
http-request use-service lua.fakeserv
|
||||
|
||||
listen li1
|
||||
mode http
|
||||
bind unix@${testdir}/srv3
|
||||
server srv3 ${s3_addr}:${s3_port}
|
||||
|
||||
} -start
|
||||
|
||||
client c0 -connect ${h1_fe1_sock} {
|
||||
txreq -url "/" -hdr "vtcport: ${s1_port}" -hdr "vtcport2: ${s2_port}" -hdr "vtcport3: ${s3_port}"
|
||||
txreq -url "/" -hdr "vtcport: ${s1_port}" -hdr "vtcport2: ${s2_port}" -hdr "vtcport3: unix@${testdir}/srv3"
|
||||
rxresp
|
||||
expect resp.status == 200
|
||||
} -run
|
||||
|
|
10
src/hlua.c
10
src/hlua.c
|
@ -7230,6 +7230,15 @@ __LJMP static int hlua_httpclient_send(lua_State *L, enum http_meth_t meth)
|
|||
if (lua_gettop(L) != 2 || lua_type(L, -1) != LUA_TTABLE)
|
||||
WILL_LJMP(luaL_error(L, "'get' needs a table as argument"));
|
||||
|
||||
hlua_hc = hlua_checkhttpclient(L, 1);
|
||||
|
||||
ret = lua_getfield(L, -1, "dst");
|
||||
if (ret == LUA_TSTRING) {
|
||||
if (httpclient_set_dst(hlua_hc->hc, lua_tostring(L, -1)) < 0)
|
||||
WILL_LJMP(luaL_error(L, "Can't use the 'dst' argument"));
|
||||
}
|
||||
lua_pop(L, 1);
|
||||
|
||||
ret = lua_getfield(L, -1, "url");
|
||||
if (ret == LUA_TSTRING) {
|
||||
url_str = lua_tostring(L, -1);
|
||||
|
@ -7254,7 +7263,6 @@ __LJMP static int hlua_httpclient_send(lua_State *L, enum http_meth_t meth)
|
|||
return 0;
|
||||
}
|
||||
|
||||
hlua_hc = hlua_checkhttpclient(L, 1);
|
||||
|
||||
hlua_hc->hc->req.url = istdup(ist(url_str));
|
||||
hlua_hc->hc->req.meth = meth;
|
||||
|
|
Loading…
Reference in New Issue