Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan golang untuk melaksanakan pemajuan permintaan

Cara menggunakan golang untuk melaksanakan pemajuan permintaan

PHPz
PHPzasal
2023-04-11 10:42:101200semak imbas

Dengan pembangunan aplikasi web, teknologi baharu sentiasa muncul. Antaranya, bahasa golang telah menarik perhatian ramai kerana keselarasannya yang tinggi, sintaks yang ringkas dan mudah difahami, serta kelajuan penyusunan yang cepat. Dalam aplikasi web, permintaan sering dimajukan kepada API yang berbeza Jadi bagaimana untuk menggunakan golang untuk melaksanakan fungsi pemajuan permintaan? Artikel ini akan memperkenalkan cara menggunakan golang untuk melaksanakan pemajuan permintaan.

1. Prinsip dan kaedah pemajuan permintaan

Pemajukan permintaan merujuk kepada proses menghantar permintaan dari satu pelayan ke pelayan yang lain. Dalam keadaan biasa, kami akan menyelesaikan tugas pemajuan permintaan melalui pelayan proksi perantaraan. Pelayan proksi perantaraan ini akan menerima semua permintaan daripada pelanggan, kemudian memajukan permintaan ini ke pelayan api hujung belakang yang berbeza, dan akhirnya mengembalikan hasil respons kepada pelanggan.

Memandangkan golang dilengkapi dengan perpustakaan httpnya sendiri, anda boleh menggunakan perpustakaan ini untuk melaksanakan pemajuan permintaan. Terdapat dua kaedah pelaksanaan khusus:

1 Kelas http.Client pakej http menggunakan kelas
untuk melaksanakan pemajuan permintaan adalah seperti berikut: http.Client

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    proxyUrl := "http://localhost:8080/" // 设置代理服务器地址
    client := &http.Client{}
    req, _ := http.NewRequest("GET", "http://www.baidu.com", nil) // 构建请求结构体
    req.Header.Set("Content-Type", "text/html;charset=UTF-8")
    req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0")
    resp, err := client.Do(req) // 发送请求
    if err != nil {
        fmt.Printf("error is %v\n", err)
    }
    defer resp.Body.Close()
    body, err2 := ioutil.ReadAll(resp.Body) // 获取响应结果
    if err2 != nil {
        fmt.Printf("error2 is %v \n", err2)
    }
    fmt.Println(string(body))
}```

上述代码中,我们使用 `http.Client` 类来创建一个代理对象,并设置了代理服务器的地址。然后,构建了一个请求体 `req`,并且设置了请求头信息。最后,使用 `client.Do()` 方法将请求发送给 api 服务器,并通过 `ioutil.ReadAll()` 函数将响应结果转换为字符串类型,最终打印在控制台上。

2、httputil包的`httputil.ReverseProxy`类
利用 `httputil.ReverseProxy` 类实现请求转发,可以比较轻松的搭建出一个反向代理服务器。代码如下:
pakej utama

import (

"log"
"net/http"
"net/http/httputil"
"net/url"
)

func main() {

server := http.Server{
    Addr: ":8080",
    Handler: &httputil.ReverseProxy{ // 使用httputil.ReverseProxy搭建代理服务器
        Director: func(req *http.Request) {
            target, _ := url.Parse("https://www.baidu.com/")
            req.URL.Scheme = target.Scheme // 设置请求上下文
            req.URL.Host = target.Host
            req.Header.Set("X-Forwarded-Host", req.Header.Get("Host"))
            req.Host = target.Host
        },
    },
}
log.Fatal(server.ListenAndServe()) // 监听端口并启动代理服务器
}

`

Dalam kod di atas, kami menggunakan kaedah

kelas httputil.ReverseProxy untuk memajukan permintaan yang diluluskan oleh hujung hadapan ke pelayan api hujung belakang. Gunakan fungsi Director dalam kaedah Director untuk menghuraikan alamat pelayan api, kemudian gunakan alamat pelayan api sebagai alamat sasaran permintaan dan tetapkan konteks permintaan. Akhir sekali, panggil kaedah url.Parse() untuk memulakan pelayan dan mendengar pada port, menunggu permintaan pelanggan. ListenAndServe

2. Ringkasan

Artikel ini memperkenalkan cara menggunakan golang untuk melaksanakan pemajuan permintaan. Antaranya, kaedah pertama menggunakan kelas

, membina badan permintaan secara manual dan menetapkan maklumat pengepala permintaan. Kaedah kedua ialah menggunakan kelas http.Client untuk membina pelayan proksi terbalik, yang lebih mudah dan lebih mudah. Ringkasnya, bagi pembangun yang perlu melaksanakan tugasan pemajuan permintaan, sila pilih kaedah pelaksanaan yang lebih sesuai mengikut keperluan anda. httputil.ReverseProxy

Atas ialah kandungan terperinci Cara menggunakan golang untuk melaksanakan pemajuan permintaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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