在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中文網其他相關文章!