拨号 tcp:本地地址类型 172.29.4.175 不匹配

Ben*_*nto 2 go

我使用以下代码收到此错误:拨号 tcp:不匹配的本地地址类型 172.29.4.175

知道如何解决这个问题吗?除了http://oocms.org/question/763660/dial-with-a-specific-address-interface-golang之外,在网上找不到任何有用的东西,但这不起作用。

IP 172.29.4.175 目前是我的 Macbooks wifi 接口的 IP。

package main

import (
    "fmt"
    "net"
    "net/http"
)

var url = "https://httpbin.org/get"

func main() {

    q := net.ParseIP("172.29.4.175")
    addr := &net.IPAddr{q, ""}

    var transport = &http.Transport{
        DialContext: (&net.Dialer{
            LocalAddr: addr,
        }).DialContext,
    }

    var httpclient = &http.Client{
        Transport: transport,
    }

    req, err := http.NewRequest("GET", url, nil)
    if err != nil {
        fmt.Println(err)
    }

    req.Header.Set("User-Agent", "Test-Agent")

    resp, err := httpclient.Do(req)
    fmt.Println(resp, err)
}
Run Code Online (Sandbox Code Playgroud)

Jim*_*imB 6

几乎 100% 的情况下,HTTP 拨号将通过 TCP 进行连接。您只需提供 IP 地址和ip网络类型,而 TCP 地址则需要tcp网络类型和端口号。

您可以替换net.TCPAddrnet.IPAddr从 开始net.ResolveTCPAddr创建正确的类型。

addr := &net.TCPAddr{net.IP{172, 29, 4, 175}, 0, ""}
Run Code Online (Sandbox Code Playgroud)

或者

addr, _ := net.ResolveTCPAddr("tcp", "172.29.4.175:0")
Run Code Online (Sandbox Code Playgroud)