在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”的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!