GoでhttpリクエストにHostを設定するにはreq.Headerではなくreq.Hostを使う

  • 8
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

ちょっとハマったのでメモです。
GoでhttpリクエストにHostを設定するには http.RequestHost フィールドを設定します。

コード例はこんな感じです。

    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というイシューがあって正しい書き方にたどりつけました。