首頁 > 後端開發 > Golang > 主體

在 Go 中發出 HTTP GET 請求時發生錯誤:'dial tcp:lookup api.ipify.org on:53:read udp:50975->:53:read:connectionrejected”

王林
發布: 2024-02-10 11:57:21
轉載
1222 人瀏覽過

在 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”的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!