Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Memajukan Permintaan HTTP ke Pelayan Lain dalam Go?

Bagaimana untuk Memajukan Permintaan HTTP ke Pelayan Lain dalam Go?

DDD
Lepaskan: 2024-12-01 22:45:13
asal
251 orang telah melayarinya

How to Forward HTTP Requests to Another Server in Go?

Pergi http: Memindahkan Permintaan HTTP yang Diterima ke Pelayan Lain

Dalam senario di mana versi perkhidmatan wujud bersama, permintaan HTTP yang masuk mungkin perlu diduplikasi untuk mengekalkan keserasian. Artikel ini meneroka kaedah untuk mengubah hala permintaan yang diterima oleh satu perkhidmatan kepada perkhidmatan yang lain menggunakan bahasa pengaturcaraan Go.

Cabaran:

Seorang pengguna menghadapi masalah semasa cuba menduplikasi POST permintaan dalam perkhidmatan Go ke perkhidmatan berasingan. Menetapkan req.URL.Host dan req.Host secara langsung mengakibatkan ralat "http: Request.RequestURI tidak boleh ditetapkan dalam permintaan pelanggan."

Penyelesaian:

Pendekatan yang disyorkan adalah untuk mencipta objek http.Request baharu dan secara terpilih menyalin bahagian yang dikehendaki daripada permintaan asal. Ini memastikan RequestURI ditetapkan dengan betul untuk permintaan kedua. Selain itu, jika badan permintaan perlu digunakan semula, ia hendaklah ditimbal dan ditetapkan pada badan permintaan baharu.

Contoh Kod Go:

func handler(w http.ResponseWriter, req *http.Request) {
    // Buffer the body for reuse
    body, err := ioutil.ReadAll(req.Body)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    req.Body = ioutil.NopCloser(bytes.NewReader(body))

    // Construct a new request with the desired URL and body
    proxyScheme := "http"
    proxyHost := "example.com"
    url := fmt.Sprintf("%s://%s%s", proxyScheme, proxyHost, req.RequestURI)
    proxyReq, err := http.NewRequest(req.Method, url, bytes.NewReader(body))

    // Copy essential headers
    proxyReq.Header = make(http.Header)
    for h, val := range req.Header {
        proxyReq.Header[h] = val
    }

    // Send the request to the other server
    resp, err := httpClient.Do(proxyReq)
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadGateway)
        return
    }
    defer resp.Body.Close()

    // Handle the response as usual
}
Salin selepas log masuk

Pendekatan ini memindahkan permintaan HTTP masuk ke pelayan lain dengan berkesan sambil menghormati RequestURI dan parameter HTTP kritikal yang lain.

Atas ialah kandungan terperinci Bagaimana untuk Memajukan Permintaan HTTP ke Pelayan Lain dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan