OneOfOne上面的答案非常好。我在這裏發佈完整的工作包代碼,以方便像我這樣的noobs。我添加了幾個println,以便您可以在修改之前和之後看到addr值。
package main
import (
"context"
"fmt"
"log"
"net"
"net/http"
"time"
)
func main() {
dialer := &net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
DualStack: true,
}
// or create your own transport, there's an example on godoc.
http.DefaultTransport.(*http.Transport).DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) {
fmt.Println("address original =", addr)
if addr == "google.com:443" {
addr = "216.58.198.206:443"
fmt.Println("address modified =", addr)
}
return dialer.DialContext(ctx, network, addr)
}
resp, err := http.Get("https://google.com")
log.Println(resp.Header, err)
}
謝謝,這個效果很好,我不得不作出一個調整轉換「https」開頭,在「地址」到「443」 –
@RyanD。我會更新答案。 – OneOfOne
@ OneOfOne我在指定IPv6地址addr =「2001:558:fe0d:23 :: 2:443」時遇到了一個問題,我猜是因爲冒號分隔符「:」周圍的混淆。我以爲我看到一個例子,他們把ipv6地址放在[[2001:558:fe0d:23 :: 2]:443]這個ipv6地址上,我認爲我有這個工作,但也失敗了。努力尋找IPv6示例。有任何想法嗎? –