Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mari kita bincangkan tentang cara menyediakan proksi di Golang

Mari kita bincangkan tentang cara menyediakan proksi di Golang

PHPz
PHPzasal
2023-04-14 14:42:244384semak imbas

Golang ialah bahasa pengaturcaraan yang pantas, cekap dan serentak Ia adalah salah satu bahasa pengaturcaraan yang paling popular pada masa ini. Semasa melakukan pengaturcaraan rangkaian, anda mungkin perlu menyediakan proksi untuk mengakses tapak web terhad. Dalam artikel ini, kita akan belajar cara menyediakan proksi di Golang.

Proksi ialah pelayan perantara yang digunakan untuk menyambungkan klien dan pelayan sasaran. Apabila pelanggan mewujudkan sambungan dengan pelayan proksi, pelayan proksi menghantar permintaan kepada pelayan sasaran bagi pihak klien. Pelayan sasaran mengembalikan respons kepada pelayan proksi, yang seterusnya mengembalikan respons kepada klien. Dengan cara ini, pelanggan boleh mendapatkan akses kepada sumber yang mungkin tidak boleh diakses.

Proksi biasa termasuk proksi HTTP dan proksi SOCKS. Di Golang, kita boleh mengkonfigurasi proksi dengan menetapkan pembolehubah persekitaran. Secara khusus, kita boleh menetapkan pembolehubah persekitaran HTTP_PROXY dan HTTPS_PROXY atau pembolehubah persekitaran ALL_PROXY (pada ketika itu proksi akan digunakan untuk semua protokol). Jika ejen anda memerlukan pengesahan, anda juga perlu menetapkan nama pengguna dan kata laluan ejen.

Berikut ialah langkah untuk menyediakan proksi di Golang:

Langkah 1: Tetapkan proksi HTTP

Tetapkan proksi HTTP dalam terminal, contohnya:

export HTTP_PROXY=http://proxy.example.com:8080

Andaikan pelayan proksi ialah "proxy.example.com" dan portnya ialah "8080".

Tetapkan proksi HTTP dalam program Golang, contohnya:

package main

import (
    "fmt"
    "net/http"
    "os"
)

func main() {
    client := &http.Client{}
    req, err := http.NewRequest("GET", "http://example.com", nil)
    if err != nil {
        fmt.Println("Error creating request:", err)
        os.Exit(1)
    }
    req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error executing request:", err)
        os.Exit(1)
    }
    fmt.Println("Response status:", resp.Status)
}

Atur cara di atas akan menghantar permintaan GET ke "http://example.com" dan mencetak status respons . Program ini akan menggunakan proksi yang ditentukan oleh pembolehubah persekitaran HTTP_PROXY. Anda boleh menukar tetapan proksi dengan menetapkan pembolehubah persekitaran HTTP_PROXY.

Langkah 2: Sediakan proksi HTTPS

Begitu juga, anda boleh mengkonfigurasi proksi HTTPS dengan menetapkan pembolehubah persekitaran HTTPS_PROXY.

export HTTPS_PROXY=https://proxy.example.com:8080

Gunakan proksi HTTPS dalam program Golang:

package main

import (
    "crypto/tls"
    "fmt"
    "net/http"
    "os"
)

func main() {
    tr := &http.Transport{
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    }
    client := &http.Client{Transport: tr}
    req, err := http.NewRequest("GET", "https://example.com", nil)
    if err != nil {
        fmt.Println("Error creating request:", err)
        os.Exit(1)
    }
    req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error executing request:", err)
        os.Exit(1)
    }
    fmt.Println("Response status:", resp.Status)
}

Atur cara di atas akan menghantar permintaan GET ke "https://example.com" dan mencetak status respons. Program ini akan menggunakan proksi yang ditentukan oleh pembolehubah persekitaran HTTPS_PROXY. Anda boleh menukar tetapan proksi dengan menetapkan pembolehubah persekitaran HTTPS_PROXY. Ambil perhatian bahawa untuk permintaan HTTPS kami perlu mencipta objek Pengangkutan dan menetapkan InsecureSkipVerify kepada benar untuk konfigurasi klien TLS supaya kami boleh mengesahkan sijil itu sendiri.

Langkah 3: Sediakan proksi SOCKS

Anda juga boleh menggunakan proksi SOCKS. Proksi SOCKS tidak berdasarkan protokol HTTP dan HTTPS, tetapi pada protokol SOCKS. Tetapkan proksi SOCKS dalam terminal:

export ALL_PROXY=socks5://proxy.example.com:1080

Tetapkan proksi SOCKS dalam program Golang:

package main

import (
    "fmt"
    "golang.org/x/net/proxy"
    "net/http"
    "os"
)

func main() {
    dialer, err := proxy.SOCKS5("tcp", "proxy.example.com:1080", nil, proxy.Direct)
    if err != nil {
        fmt.Println("Error setting up SOCKS5 proxy:", err)
        os.Exit(1)
    }
    transport := &http.Transport{Dial: dialer.Dial}
    client := &http.Client{Transport: transport}
    req, err := http.NewRequest("GET", "http://example.com", nil)
    if err != nil {
        fmt.Println("Error creating request:", err)
        os.Exit(1)
    }
    req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error executing request:", err)
        os.Exit(1)
    }
    fmt.Println("Response status:", resp.Status)
}

Atur cara di atas akan menghantar permintaan GET ke "http://example .com" dan cetak status respons. Program ini akan menggunakan proksi SOCKS yang ditentukan oleh pembolehubah persekitaran ALL_PROXY. Anda boleh mengkonfigurasi proksi untuk semua protokol dengan menetapkan pembolehubah persekitaran ALL_PROXY.

Ringkasan

Dengan menetapkan pembolehubah persekitaran HTTP_PROXY, HTTPS_PROXY dan ALL_PROXY, anda boleh mengkonfigurasi proksi HTTP, HTTPS dan SOCKS di Golang. Ini menjadikan Golang lebih fleksibel untuk pengaturcaraan rangkaian berbanding bahasa pengaturcaraan lain.

Atas ialah kandungan terperinci Mari kita bincangkan tentang cara menyediakan proksi di Golang. 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