Standartiniame Go 1.27.3 HTTP transporte socks5 ir socks5h vienodai apdoroja paskirties vardus. Tikslas su serverio vardu siunčiamas tarpiniam serveriui kaip vardas. Šių schemų pakeitimas neperjungia vietinio ir nuotolinio DNS taip, kaip 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)
}

Dokumentacijos adresą pakeiskite savo SOCKS5 galiniu tašku; kandidatų galima rasti SOCKS5 tarpinių serverių sąraše. Pavyzdys naudoja paties net/http transportą; kita Go biblioteka gali veikti kitaip.

Vis tiek reikia atskirti du vardus. Skaitiniam tarpinio serverio adresui nereikia jo vardo paieškos; vardu nurodytą tarpinį serverį reikia rasti vietoje prieš siunčiant SOCKS užklausą. Skaitinė paskirtis neturi sprendžiamo vardo ir negali parodyti serverių vardų apdorojimo. Norėdami patikrinti tikrąjį SOCKS pasirinkimą, žiūrėkite, ar paskirties laukas perduoda vardą, ar adresą.

Standartinis transportas palaiko tarpinių serverių schemas http, https, socks5 ir socks5h. Bendras SOCKS pavadinimas neįrodo, kad galinis taškas palaiko SOCKS5. Šis pavyzdys siunčia HTTP per TCP ir netikrina kitų SOCKS komandų ar UDP persiuntimo.

Susiję straipsniai