Heim > Backend-Entwicklung > Golang > Fehler beim Erstellen einer HTTP-GET-Anfrage in Go: „dial tcp:lookup api.ipify.org on:53:read udp:50975->:53:read:connectionrejected'

Fehler beim Erstellen einer HTTP-GET-Anfrage in Go: „dial tcp:lookup api.ipify.org on:53:read udp:50975->:53:read:connectionrejected'

王林
Freigeben: 2024-02-10 11:57:21
nach vorne
1272 Leute haben es durchsucht

在 Go 中发出 HTTP GET 请求时出错:“dial tcp:lookup api.ipify.org on:53:read udp:50975->:53:read:connectionrejected“></p><p>Wenn wir in der Go-Sprache versuchen, eine HTTP-GET-Anfrage zu senden, stoßen wir manchmal auf eine Meldung namens „dial tcp: lookup api.ipify.org on: 53: read udp.“ : 50975->: 53: Lesen: Verbindung abgelehnt“ Fehler. Dieser Fehler tritt normalerweise bei Netzwerkverbindungen auf und bedeutet, dass unser Programm keine Verbindung zum Zielserver herstellen kann. Dieser Fehler kann viele Gründe haben, z. B. Netzwerkfehler, Probleme mit der DNS-Auflösung oder Firewall-Einschränkungen. Die Lösung dieses Problems hängt von der jeweiligen Situation ab. Wir können versuchen, die Netzwerkeinstellungen zu überprüfen, zu überprüfen, ob die DNS-Auflösung korrekt ist, Firewall-Einschränkungen zu beseitigen usw. Durch die Behebung dieses Fehlers können wir sicherstellen, dass unser Go-Programm HTTP-Anfragen normal senden und die erforderlichen Daten abrufen kann. </p><h2 class=Frageninhalt

Ich versuche, eine HTTP-GET-Anfrage in Go zu stellen, indem ich das Paket net/http verwende, um meine öffentliche IP-Adresse mithilfe des Dienstes api.ipify.org abzurufen. Ich habe den Fehler erst erhalten, nachdem ich die App erstellt habe mit:

CGO_ENABLED=0 GOOS=linux go build -a -ldflags "-s -w" -o ip get.go
Nach dem Login kopieren

Allerdings ist mir aufgefallen, dass der Code sehr gut läuft, wenn ich den folgenden Befehl verwende:

go build get.go
Nach dem Login kopieren
go run get.go
Nach dem Login kopieren

Das ist der Code, den ich verwende:

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()
}
Nach dem Login kopieren

Was mich verwirrt, ist, warum der Code mit go buildgo run funktioniert, aber fehlschlägt, wenn ich komplexere Build-Befehle verwende. Kann mir jemand helfen, die Ursache dieses Problems zu verstehen und wie ich es beheben kann? Vielen Dank für Ihre Zeit und Hilfe!

Workaround

Wenn CGO verfügbar ist, wird ein CGO-basierter Parser verwendet. Es verwendet verschiedene Mittel, um Domänen aufzulösen, die /etc/resolv.conf oder /etc/nsswitch.conf usw. lesen. Diese Funktionen werden vom Go-basierten DNS-Resolver nicht implementiert, was dazu führt, dass die Domäne nicht aufgelöst werden kann und die HTTP-Anfrage fehlschlägt.

Das obige ist der detaillierte Inhalt vonFehler beim Erstellen einer HTTP-GET-Anfrage in Go: „dial tcp:lookup api.ipify.org on:53:read udp:50975->:53:read:connectionrejected'. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage