Skip to content

Commit 2c8ddb8

Browse files
authored
Merge pull request #239 from nonylene/fix-check-http-headers
[check-http] Set Host header via req.Host
2 parents 910d3f4 + dc466b1 commit 2c8ddb8

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

check-http/lib/check_http.go

+10-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type checkHTTPOpts struct {
2525
Statuses []string `short:"s" long:"status" description:"mapping of HTTP status"`
2626
NoCheckCertificate bool `long:"no-check-certificate" description:"Do not check certificate"`
2727
SourceIP string `short:"i" long:"source-ip" description:"source IP address"`
28-
Headers []string `short:"H" description:"Host name for servers using host headers"`
28+
Headers []string `short:"H" description:"HTTP request headers"`
2929
Regexp string `short:"p" long:"pattern" description:"Expected pattern in the content"`
3030
}
3131

@@ -145,10 +145,18 @@ func Run(args []string) *checkers.Checker {
145145
}
146146

147147
if len(opts.Headers) != 0 {
148-
req.Header, err = parseHeader(&opts)
148+
header, err := parseHeader(&opts)
149149
if err != nil {
150150
return checkers.Unknown(err.Error())
151151
}
152+
153+
// Host header must be set via req.Host
154+
if host := header.Get("Host"); len(host) != 0 {
155+
req.Host = host
156+
header.Del("Host")
157+
}
158+
159+
req.Header = header
152160
}
153161

154162
stTime := time.Now()

check-http/lib/check_http_test.go

+16-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,22 @@ func TestSourceIP(t *testing.T) {
7777
}
7878

7979
func TestHost(t *testing.T) {
80-
ckr := Run([]string{"-H", `"Host: mackerel.io"`, "-H", `"Accept-Encoding: gzip"`, "-u", "https://mackerel.io"})
80+
testHost := "mackerel.io"
81+
testHeader := "test"
82+
83+
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
84+
assert.Equal(t, testHost, r.Host)
85+
header := r.Header
86+
assert.Equal(t, testHeader, header.Get("TestHeader"))
87+
}))
88+
defer ts.Close()
89+
90+
ckr := Run([]string{
91+
"-H", fmt.Sprintf("Host: %s", testHost),
92+
"-H", fmt.Sprintf("TestHeader: %s", testHeader),
93+
"-u", ts.URL,
94+
})
95+
8196
assert.Equal(t, ckr.Status, checkers.OK, "ckr.Status should be OK")
8297
}
8398

0 commit comments

Comments
 (0)