:53:read:connectionrejected"-Golang-php.cn">

Maison  >  Article  >  développement back-end  >  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"

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"

王林
王林avant
2024-02-10 11:57:211224parcourir

在 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

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

go build get.go
go run get.go

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()
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer