req.Header.Set("X-Hoge", "fugapiyo")
する http.RoundTripper
を実装したらできそう。
実装
全てのリクエストの User-Agent
を utagawakiki-bot (+https://twitter.com/utgwkk)
に設定する RoudTripper です。こんな感じで http.DefaultClient.Transport
に設定したり、お使いの http.Client
に挟み込んだりできます。
package main import ( "fmt" "io/ioutil" "log" "net/http" ) func main() { http.DefaultClient.Transport = &userAgentTransport{} resp, err := http.Get("https://httpbin.org/headers") if err != nil { log.Fatal(err) } defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(string(buf)) } const userAgent = "utagawakiki-bot (+https://twitter.com/utgwkk)" type userAgentTransport struct { Transport http.RoundTripper } func (t *userAgentTransport) RoundTrip(req *http.Request) (resp *http.Response, err error) { transport := t.Transport if transport == nil { transport = http.DefaultTransport } req.Header.Set("User-Agent", userAgent) resp, err = transport.RoundTrip(req) return }
実行結果
{ "headers": { "Accept-Encoding": "gzip", "Host": "httpbin.org", "User-Agent": "utagawakiki-bot (+https://twitter.com/utgwkk)", "X-Amzn-Trace-Id": "Root=1-5fc3621d-0125a0fe085c502a32591819" } }
オチ
github.com/google/go-github には User-Agent 文字列を設定するインタフェースが用意されていたので、この実装は不要になりました。よかったですね。