ちょっとハマったのでメモです。
GoでhttpリクエストにHostを設定するには http.Request の Host
フィールドを設定します。
コード例はこんな感じです。
u := "http://127.0.0.1"
req, err := http.NewRequest("GET", u, nil)
if err != nil {
return err
}
req.Host = "example.com"
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
req.Host = "example.com"
のところを req.Header.Set("Host", "example.com")
とか req.Header.Add("Host", "example.com")
と書くと Host ヘッダーが設定されなくてハマりました。
Issue 7682 - go - net/http: Setting custom "Host" request header doesn't have effect - The Go Programming Language - Google Project Hostingというイシューがあって正しい書き方にたどりつけました。