代码之家  ›  专栏  ›  技术社区  ›  Farhan Ali

在Go中发出HTTP GET请求时出错:“拨号tcp:lookup api.ipify.org on[::1]:53:read-udp[:1]:50975->[::1]:53:read:连接被拒绝”

  •  0
  • Farhan Ali  · 技术社区  · 2 年前

    我正试图在Go中使用 net/http 使用api.ipify.org服务检索我的公共IP地址。只有在使用以下命令构建应用程序后,我才会遇到错误:

    CGO_ENABLED=0 GOOS=linux go build -a -ldflags "-s -w" -o ip get.go
    

    然而,我注意到,当我使用以下任一命令时,代码运行得非常好:

    go build get.go
    
    go run get.go
    

    以下是我正在使用的代码:

    package main
    
    import (
        "fmt"
        "io/ioutil"
        "net/http"
    )
    
    func get() {
        resp, err := http.Get("https://api.ipify.org")
        if err == nil {
            defer resp.Body.Close()
            bodyBytes, _ := ioutil.ReadAll(resp.Body)
            body := string(bodyBytes)
            fmt.Println(body)
        } else {
            fmt.Println(err)
        }
    }
    
    func main() {
        get()
    }
    

    我很困惑为什么代码能与 go build go run 但是当我使用更复杂的build命令时失败了。有人能帮我了解这个问题的原因以及我如何解决吗?感谢您的时间和帮助!

    1 回复  |  直到 2 年前
        1
  •  2
  •   Sigma    2 年前

    当cgo可用时,将使用基于cgo的解析器。它使用各种方式来解析正在读取/etc/resolv.conf或/etc/nsswitch.conf等的域。这些功能不是由基于Go的DNS解析程序实现的,因此导致无法解析域,HTTP请求失败。