Go
golang

http.Client の DNS resolver を差し替える

http.Client の名前解決をローカルに適当に立てた DNS sever に向けたいときに.

:warning: production ready かどうかは知らない

dnsAddr := ":5300"

dialerFunc := func(ctx context.Context, network, address string) (net.Conn, error) {
    d := net.Dialer{}
    return d.DialContext(ctx, "udp", dnsAddr)
}

resolver := &net.Resolver{PreferGo: true, Dial: dialerFunc}
dialer := net.Dialer{Resolver: resolver}

transport := &http.Transport{
    Dial:        dialer.Dial,
    DialContext: dialer.DialContext,
}

httpClient := &http.Client{Transport: transport}

http.DefaultTransport みたいなのを破壊せずコピーしてくる便利な方法ないのかな