一尘不染

如何设置用于HTTP请求的IP?

go

我不知道是否有可能,因为std lib没有说明有关当前使用的地址的任何信息:

http://golang.org/pkg/net/http/

resp, err := http.Get("http://example.com/")
if err != nil {
    // handle error
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)

我想做的是为该HTTP请求设置源地址,为什么?因为我不想将我的主要IP地址用于此类工作…


阅读 667

收藏
2020-07-02

共1个答案

一尘不染

您可以在客户端传输中设置自定义拨号程序。

// Create a transport like http.DefaultTransport, but with a specified localAddr
transport := &http.Transport{
    Proxy: http.ProxyFromEnvironment,
    DialContext: (&net.Dialer{
        Timeout:   30 * time.Second,
        KeepAlive: 30 * time.Second,
        LocalAddr: localAddr,
        DualStack: true,
    }).DialContext,
    MaxIdleConns:          100,
    IdleConnTimeout:       90 * time.Second,
    TLSHandshakeTimeout:   10 * time.Second,
    ExpectContinueTimeout: 1 * time.Second,
}

client := &http.Client{
    Transport: transport,
}
2020-07-02