在 Go 中发出 HTTP GET 请求时出错:“dial tcp:lookup api.ipify.org on:53:read udp:50975>:53:read:connectionrejected”

2024年 2月 10日 65.3k 0

在 go 中发出 http get 请求时出错:“dial tcp:lookup api.ipify.org on:53:read udp:50975-:53:read:connectionrejected”

在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 buildgo 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)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论