Preklad názvov SOCKS5 v HTTP klientovi Go
Prečo socks5 a socks5h nevyberajú rôzne režimy DNS v štandardnom HTTP transporte Go.
V štandardnom HTTP transporte Go 1.27.3 spracúvajú socks5 a socks5h názvy cieľov rovnako. Cieľ zadaný názvom hostiteľa sa proxy odošle ako názov hostiteľa. Prepnutie týchto schém neprepína miestne a vzdialené DNS ako v 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)
}
Nahraďte dokumentačnú adresu svojím SOCKS5 koncovým bodom; kandidátov nájdete v zozname SOCKS5 proxy. Príklad používa vlastný transport net/http; iná knižnica Go môže mať odlišné správanie.
Stále je potrebné odlíšiť dva názvy. Číselná adresa proxy nevyžaduje vyhľadanie jej hostiteľa; proxy určený názvom sa musí nájsť miestne pred odoslaním požiadavky SOCKS. Číselný cieľ nemá názov na preklad a nemôže doložiť prácu s názvami hostiteľov. Skutočnú voľbu SOCKS overíte kontrolou, či pole cieľa obsahuje názov alebo adresu.
Štandardný transport podporuje schémy proxy http, https, socks5 a socks5h. Všeobecné označenie SOCKS nedokazuje podporu SOCKS5 na koncovom bode. Tento príklad posiela HTTP cez TCP a netestuje iné príkazy SOCKS ani prenos UDP.