返回顶部
首页 > 资讯 > 精选 >在 Go 中发出 HTTP GET 请求时出错:“dial tcp:lookup api.ipify.org on:53:read udp:50975->:53:read:connectionr
  • 920
分享到

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

go语言 2024-02-10 11:02:39 920人浏览 独家记忆
摘要

在Go语言中,当我们尝试发送Http GET请求时,有时会遇到名为“dial tcp: lookup api.ipify.org on: 53: read udp: 50975->

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”的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 在 Go 中发出 HTTP GET 请求时出错:“dial tcp:lookup api.ipify.org on:53:read udp:50975->:53:read:connectionr

本文链接: https://lsjlt.com/news/563028.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作