From 6c0518b89a81418033490dd3368bc30ec720f2b9 Mon Sep 17 00:00:00 2001 From: Tolyar Date: Sun, 26 Dec 2021 16:08:23 +0300 Subject: [PATCH] Fix UseHostHeader for DoTimeout + tests (#1184) --- http.go | 2 ++ http_test.go | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/http.go b/http.go index 81b2496ff6..c17b22f758 100644 --- a/http.go +++ b/http.go @@ -732,6 +732,8 @@ func (req *Request) copyToSkipBody(dst *Request) { dst.parsedPostArgs = req.parsedPostArgs dst.isTLS = req.isTLS + dst.UseHostHeader = req.UseHostHeader + // do not copy multipartForm - it will be automatically // re-created on the first call to MultipartForm. } diff --git a/http_test.go b/http_test.go index ac71903949..8183d41e6c 100644 --- a/http_test.go +++ b/http_test.go @@ -9,6 +9,8 @@ import ( "io" "io/ioutil" "mime/multipart" + "net/http" + "net/http/httptest" "reflect" "strconv" "strings" @@ -754,6 +756,41 @@ func TestUseHostHeader(t *testing.T) { } } +func TestUseHostHeader2(t *testing.T) { + testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Host != "SomeHost" { + http.Error(w, fmt.Sprintf("Expected Host header to be '%s', but got '%s'", "SomeHost", r.Host), http.StatusBadRequest) + } else { + w.WriteHeader(http.StatusOK) + } + })) + defer testServer.Close() + + client := &Client{} + req := AcquireRequest() + defer ReleaseRequest(req) + resp := AcquireResponse() + defer ReleaseResponse(resp) + + req.SetRequestURI(testServer.URL) + req.UseHostHeader = true + req.Header.SetHost("SomeHost") + if err := client.DoTimeout(req, resp, 1*time.Second); err != nil { + t.Fatalf("DoTimeout returned an error '%s'", err) + } else { + if resp.StatusCode() != http.StatusOK { + t.Fatalf("DoTimeout: %s", resp.body) + } + } + if err := client.Do(req, resp); err != nil { + t.Fatalf("DoTimeout returned an error '%s'", err) + } else { + if resp.StatusCode() != http.StatusOK { + t.Fatalf("Do: %s", resp.body) + } + } +} + func TestRequestBodyStreamMultipleBodyCalls(t *testing.T) { t.Parallel()