Resolusi Nama Hos SOCKS5 dalam Klien HTTP Go
Mengapa socks5 dan socks5h tidak memilih mod DNS berlainan dalam pengangkutan HTTP piawai Go.
Dalam pengangkutan HTTP piawai Go 1.27.3, socks5 dan socks5h mengendalikan nama destinasi dengan cara sama. Sasaran bernama hos dihantar kepada proksi sebagai nama hos. Menukar skema itu tidak beralih antara DNS setempat dan jauh seperti dalam curl.
package main
import (
"fmt"
"log"
"net/http"
"net/url"
"time"
)
func main() {
proxyURL, err := url.Parse("socks5://203.0.113.10:1080")
if err != nil {
log.Fatal(err)
}
transport := http.DefaultTransport.(*http.Transport).Clone()
transport.Proxy = http.ProxyURL(proxyURL)
defer transport.CloseIdleConnections()
client := &http.Client{
Transport: transport,
Timeout: 15 * time.Second,
}
response, err := client.Get("https://example.com/")
if err != nil {
log.Fatal(err)
}
defer response.Body.Close()
fmt.Println(response.StatusCode)
}
Gantikan alamat dokumentasi dengan titik akhir SOCKS5 anda; calon boleh dilihat dalam senarai proksi SOCKS5. Contoh menggunakan pengangkutan milik net/http sendiri; pustaka Go lain boleh melaksanakan tingkah laku berbeza.
Dua nama masih perlu dibezakan. Alamat proksi berangka tidak memerlukan carian hos proksi; proksi bernama perlu ditemui secara setempat sebelum permintaan SOCKS boleh dihantar. Destinasi berangka tiada nama sasaran untuk diselesaikan dan tidak dapat menunjukkan pengendalian nama hos. Untuk memeriksa pilihan SOCKS sebenar, lihat sama ada medan destinasi membawa nama atau alamat.
Pengangkutan piawai menyokong skema proksi http, https, socks5 dan socks5h. Label SOCKS umum tidak membuktikan sokongan SOCKS5 pada titik akhir. Contoh ini menghantar HTTP melalui TCP dan tidak menguji arahan SOCKS lain atau geganti UDP.