SOCKS5-hostnammeoplossing yn de HTTP-kliïnt fan Go
Wêrom socks5 en socks5h gjin ferskillende DNS-modussen kieze yn it standert-HTTP-transport fan Go.
Yn it standert-HTTP-transport fan Go 1.27.3 behannelje socks5 en socks5h bestimmingsnammen itselde. In doel mei in hostnamme wurdt as hostnamme nei de proxy stjoerd. Dy skema's wikselje skeakelt net tusken lokale en eksterne DNS lykas yn 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)
}
Ferfang it dokumintaasjeadres troch dyn SOCKS5-einpunt; kandidaten binne te finen yn de list mei SOCKS5-proxy's. It foarbyld brûkt it eigen transport fan net/http; in oare Go-biblioteek kin oar gedrach ymplementearje.
Der binne noch twa nammen te ûnderskieden. In numerik proxyadres hat gjin proxyhostopsykjen nedich; in proxy mei in namme moat lokaal fûn wurde foar't in SOCKS-fersyk stjoerd wurde kin. In numerike bestimming hat gjin doelnamme om op te lossen en kin hostnammebehanneling net oantoane. Sjoch foar de echte SOCKS-kar oft it bestimmingsfjild in namme of adres draacht.
It standerttransport stipet de proxyskema's http, https, socks5 en socks5h. In algemien SOCKS-label bewijst gjin SOCKS5-stipe by in einpunt. Dit foarbyld stjoert HTTP oer TCP en test gjin oare SOCKS-kommando's of UDP-trochstjoering.