From 68ed90641e7be407a7be1b99a75f5e93d4357f0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kenan=20Faruk=20=C3=87ak=C4=B1r?= Date: Mon, 17 Jul 2023 12:22:08 +0300 Subject: [PATCH] override req host from header --- core/scenario/requester/http.go | 14 +++++++++++--- core/scenario/requester/http_test.go | 1 + 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/core/scenario/requester/http.go b/core/scenario/requester/http.go index 3d8b403c..d9f1065f 100644 --- a/core/scenario/requester/http.go +++ b/core/scenario/requester/http.go @@ -437,7 +437,12 @@ func (h *HttpRequester) prepareReq(envs map[string]interface{}, trace *httptrace if errURL != nil { return nil, errURL } - httpReq.Host = httpReq.URL.Host + + // If Host is not given in the header, set it from the original URL + // Note that a temporary url used in initRequest + if httpReq.Header.Get("Host") == "" { + httpReq.Host = httpReq.URL.Host + } // header if h.containsDynamicField["header"] { @@ -619,10 +624,13 @@ func (h *HttpRequester) initRequestInstance() (err error) { // Headers header := make(http.Header) for k, v := range h.packet.Headers { + header.Set(k, v) + // Since we use a temp url, we need to override the request.Host either + // it will be app.ddosify.com + // or it will be the host from the headers + // later on prepareReq, we will override the host if it is set in the headers if strings.EqualFold(k, "Host") { h.request.Host = v - } else { - header.Set(k, v) } } diff --git a/core/scenario/requester/http_test.go b/core/scenario/requester/http_test.go index 1d62bb3f..bd30c891 100644 --- a/core/scenario/requester/http_test.go +++ b/core/scenario/requester/http_test.go @@ -266,6 +266,7 @@ func TestInitRequest(t *testing.T) { expectedWithHeaders.Header.Set("Header1", "Value1") expectedWithHeaders.Header.Set("Header2", "Value2") expectedWithHeaders.Header.Set("User-Agent", "Firefox") + expectedWithHeaders.Header.Set("Host", "test.com") expectedWithHeaders.Host = "test.com" expectedWithHeaders.SetBasicAuth(sWithHeaders.Auth.Username, sWithHeaders.Auth.Password)