Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah cara saya Memeriksa dan Mengubah Suai Badan Respons dalam Proksi Go Reverse?

Bagaimanakah cara saya Memeriksa dan Mengubah Suai Badan Respons dalam Proksi Go Reverse?

Linda Hamilton
Lepaskan: 2024-11-07 22:48:02
asal
385 orang telah melayarinya

How do I Inspect and Modify the Response Body in a Go Reverse Proxy?

Cara Memeriksa dan Mengubah Suai Badan Respons dalam ReverseProxy

Dalam kod Go yang disediakan, proksi terbalik disediakan untuk mengubah hala permintaan kepada Google. Walau bagaimanapun, untuk mendapatkan cerapan yang lebih mendalam atau menyesuaikan respons, mengakses badan tindak balas adalah penting.

Penyelesaian terletak pada memanfaatkan medan ModifyResponse dalam struct ReverseProxy. Medan ini membenarkan untuk menentukan fungsi yang mengubah suai respons HTTP sebelum ia sampai kepada klien.

Pelaksanaan

Kod yang diubah suai berikut menunjukkan cara membaca dan mengubah suai badan respons:

package main

import (
    "bytes"
    "fmt"
    "io"
    "io/ioutil"
    "net/http"
    "net/http/httputil"
    "net/url"
    "strconv"
)

func main() {
    target := &url.URL{Scheme: "http", Host: "www.google.com"}
    proxy := httputil.NewSingleHostReverseProxy(target)

    // Modify the response body before sending it to the client
    proxy.ModifyResponse = func(resp *http.Response) (err error) {
        b, err := ioutil.ReadAll(resp.Body) // Read the response body
        if err != nil {
            return err
        }
        err = resp.Body.Close() // Close the `Body` and `resp`
        if err != nil {
            return err
        }

        // Modify the response body
        b = bytes.Replace(b, []byte("server"), []byte("schmerver"), -1)

        // Create a new `body` to keep the `Content-Length` and `Body` up-to-date
        body := ioutil.NopCloser(bytes.NewReader(b))
        resp.Body = body
        resp.ContentLength = int64(len(b))
        resp.Header.Set("Content-Length", strconv.Itoa(len(b)))

        fmt.Println("Modified response: ", string(b)) // See the modified response

        return nil
    }

    http.Handle("/google", proxy)
    http.ListenAndServe(":8099", nil)
}
Salin selepas log masuk

Cara Ia Berfungsi

Fungsi ModifyResponse membaca badan tindak balas asal ke dalam penimbal menggunakan ioutil.ReadAll. Ia kemudian menutup resp.Body asal dan mengubah suai kandungan badan.

Untuk memastikan respons itu sah, badan baharu dibuat dan ditetapkan kepada resp.Body. Pengepala Panjang Kandungan juga dikemas kini untuk menggambarkan panjang badan baharu.

Akhir sekali, badan respons yang diubah suai dicetak ke konsol untuk pemeriksaan mudah dan respons yang diubah suai dihantar kepada pelanggan.

Atas ialah kandungan terperinci Bagaimanakah cara saya Memeriksa dan Mengubah Suai Badan Respons dalam Proksi Go Reverse?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan