Bagaimana untuk Memeriksa dan Mengubah Suai Badan Respons Proksi Songsang dalam Go?

Patricia Arquette
Lepaskan: 2024-11-13 07:17:02
asal
1026 orang telah melayarinya

How to Inspect and Modify the Response Body of a Reverse Proxy in Go?

Cara Memeriksa Badan Respons Proksi Songsang

Dalam kod Go yang diberikan, proksi terbalik disediakan untuk mengubah hala permintaan ke www.google.com. Semasa proksi terbalik berfungsi dengan betul, persoalan timbul: bagaimanakah seseorang boleh mengakses badan tindak balas permintaan yang diproksi?

Penyelesaian untuk ini terletak pada pakej httputil, yang menyediakan jenis ReverseProxy. Dalam versi terkini pakej, ReverseProxy menawarkan fungsi ModifyResponse pilihan yang membolehkan penyesuaian dan pemeriksaan respons yang datang dari bahagian belakang.

Secara khusus, dengan melaksanakan fungsi ini, pembangun boleh mengubah suai *http.Response sebelum lulus itu kepada klien. Satu kes penggunaan yang berpotensi untuk ModifyResponse ialah membaca dan memanipulasi badan tindak balas.

Untuk menunjukkan perkara ini, pertimbangkan kod yang diubah suai berikut:

package main

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

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

    proxy.ModifyResponse = func(resp *http.Response) (err error) {
        b, err := ioutil.ReadAll(resp.Body) // Read the HTML response body
        if err != nil {
            return err
        }

        resp.Body.Close() // The body is closed by the ReadAll function, but it's good practice to close it again
        b = bytes.Replace(b, []byte("server"), []byte("schmerver"), -1) // Modify the HTML response by replacing "server" with "schmerver"

        newBody := ioutil.NopCloser(bytes.NewReader(b))
        resp.Body = newBody
        resp.ContentLength = int64(len(b))
        resp.Header.Set("Content-Length", strconv.Itoa(len(b)))
        fmt.Println(resp) // Print the modified response for debugging purposes

        return nil
    }

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

Dalam kod ini, fungsi ModifyResponse ditakrifkan untuk membaca badan respons HTML, ubah suainya dengan menggantikan rentetan tertentu, dan kemudian tetapkan badan yang diubah suai sebagai badan tindak balas. Dengan mengendalikan laluan URL "/google", permintaan ke www.google.com akan diproksikan dan respons yang diubah suai akan dihantar semula kepada klien.

Atas ialah kandungan terperinci Bagaimana untuk Memeriksa dan Mengubah Suai Badan Respons Proksi Songsang 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan