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

Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ralat semasa membuat permintaan HTTP GET dalam Go: "dail tcp:lookup api.ipify.org on:53:read udp:50975->:53:read:connectionrejected"

Ralat semasa membuat permintaan HTTP GET dalam Go: "dail tcp:lookup api.ipify.org on:53:read udp:50975->:53:read:connectionrejected"

王林
王林ke hadapan
2024-02-10 11:57:211224semak imbas

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

Dalam bahasa Go, apabila kami cuba menghantar permintaan HTTP GET, kadangkala kami menemui mesej yang dipanggil “dail tcp: lookup api.ipify.org pada: 53: baca udp : 50975->: 53: baca: ralat sambungan ditolak". Ralat ini biasanya muncul dari segi sambungan rangkaian dan ini bermakna program kami tidak dapat mewujudkan sambungan ke pelayan sasaran. Mungkin terdapat banyak sebab untuk ralat ini, seperti kegagalan rangkaian, isu resolusi DNS atau sekatan tembok api. Kaedah untuk menyelesaikan masalah ini bergantung pada situasi tertentu Kami boleh cuba menyemak tetapan rangkaian, mengesahkan sama ada resolusi DNS adalah betul, menghapuskan sekatan firewall, dsb. Dengan menyelesaikan ralat ini, kami boleh memastikan program Go kami boleh menghantar permintaan HTTP dengan betul dan mendapatkan data yang diperlukan.

Kandungan soalan

Saya cuba membuat permintaan HTTP GET dalam Go menggunakan pakej net/http untuk mendapatkan semula alamat IP awam saya menggunakan perkhidmatan api.ipify.org. Saya mendapat ralat hanya selepas membina apl menggunakan:

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

Walau bagaimanapun, saya perhatikan bahawa kod itu berjalan dengan baik apabila saya menggunakan arahan berikut:

go build get.go
go run get.go

Ini adalah kod yang saya gunakan:

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

Apa yang mengelirukan saya ialah mengapa kod itu berfungsi dengan go buildgo run tetapi gagal apabila saya menggunakan arahan binaan yang lebih kompleks. Bolehkah sesiapa membantu saya memahami perkara yang mungkin menyebabkan masalah ini dan cara membetulkannya? Terima kasih atas masa dan bantuan anda!

Penyelesaian

Apabila cgo tersedia, penghurai berasaskan cgo akan digunakan. Ia menggunakan pelbagai cara untuk menyelesaikan domain yang membaca /etc/resolv.conf atau /etc/nsswitch.conf dsb. Ciri ini tidak dilaksanakan oleh penyelesai DNS berasaskan Go, mengakibatkan domain yang tidak dapat diselesaikan dan permintaan HTTP gagal.

Atas ialah kandungan terperinci Ralat semasa membuat permintaan HTTP GET dalam Go: "dail tcp:lookup api.ipify.org on:53:read udp:50975->:53:read:connectionrejected". Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam