Maison > développement back-end > Golang > le corps du texte

Erreur lors de l'exécution d'une requête HTTP GET dans Go : 'dial tcp:lookup api.ipify.org on:53:read udp:50975->:53:read:connectionrejected'

王林
Libérer: 2024-02-10 11:57:21
avant
1222 Les gens l'ont consulté

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

Dans le langage Go, lorsque nous essayons d'envoyer une requête HTTP GET, nous rencontrons parfois un message appelé "dial tcp: lookup api.ipify.org on: 53: read udp : 50975->: 53 : lecture : erreur de connexion rejetée". Cette erreur apparaît généralement en termes de connexions réseau et signifie que notre programme ne peut pas établir de connexion avec le serveur cible. Cette erreur peut avoir plusieurs raisons, telles qu'une panne de réseau, des problèmes de résolution DNS ou des restrictions de pare-feu. La solution à ce problème dépend de la situation spécifique. Nous pouvons essayer de vérifier les paramètres réseau, vérifier si la résolution DNS est correcte, éliminer les restrictions du pare-feu, etc. En résolvant cette erreur, nous pouvons garantir que notre programme Go peut envoyer normalement des requêtes HTTP et obtenir les données requises.

Contenu de la question

J'essaie de faire une requête HTTP GET dans Go en utilisant le package net/http pour récupérer mon adresse IP publique à l'aide du service api.ipify.org. J'ai eu l'erreur seulement après avoir créé l'application en utilisant :

CGO_ENABLED=0 GOOS=linux go build -a -ldflags "-s -w" -o ip get.go
Copier après la connexion

Cependant, j'ai remarqué que le code fonctionne très bien lorsque j'utilise la commande suivante :

go build get.go
Copier après la connexion
go run get.go
Copier après la connexion

Voici le code que j'utilise :

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()
}
Copier après la connexion

Ce qui me rend confus, c'est pourquoi le code fonctionne avec go buildgo run mais échoue lorsque j'utilise des commandes de construction plus complexes. Quelqu'un peut-il m'aider à comprendre ce qui pourrait causer ce problème et comment le résoudre ? Merci pour votre temps et votre aide !

Solution de contournement

Lorsque cgo est disponible, un analyseur basé sur cgo sera utilisé. Il utilise divers moyens pour résoudre les domaines qui lisent /etc/resolv.conf ou /etc/nsswitch.conf etc. Ces fonctionnalités ne sont pas implémentées par le résolveur DNS basé sur Go, ce qui entraîne des domaines qui ne peuvent pas être résolus et des requêtes HTTP qui échouent.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!