在Go语言中,当我们尝试发送HTTP GET请求时,有时会遇到名为“dial tcp: lookup api.ipify.org on: 53: read udp: 50975->: 53: read: connection rejected”的错误。这个错误通常出现在网络连接方面,它表示我们的程序无法建立与目标服务器的连接。这个错误的原因可能有很多,如网络故障、DNS解析问题或防火墙限制等。解决这个问题的方法取决于具体情况,我们可以尝试检查网络设置、验证DNS解析是否正确、排除防火墙限制等。通过解决这个错误,我们可以确保我们的Go程序能够正常地发送HTTP请求并获取所需的数据。
我正在尝试使用 net/http
包在 Go 中发出 HTTP GET 请求,以使用 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
一起使用,但当我使用更复杂的构建命令时却失败。有人可以帮助我了解可能导致此问题的原因以及如何解决它吗?感谢您的时间和帮助!
当 cgo 可用时,将使用基于 cgo 的解析器。它使用各种方式来解析正在读取 /etc/resolv.conf 或 /etc/nsswitch.conf 等的域。这些功能不是由基于 Go 的 DNS 解析器实现的,因此导致无法解析域和 HTTP 请求失败。
以上是在 Go 中发出 HTTP GET 请求时出错:'dial tcp:lookup api.ipify.org on:53:read udp:50975->:53:read:connectionrejected”的详细内容。更多信息请关注PHP中文网其他相关文章!