U standardnom HTTP transportu Goa 1.27.3 socks5 i socks5h jednako obrađuju naziv odredišta. Odredište s nazivom hosta šalje se proksiju kao naziv hosta. Prebacivanje tih šema ne mijenja lokalni i udaljeni DNS kao u curl-u.

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)
}

Zamijenite dokumentacijsku adresu svojom SOCKS5 krajnjom tačkom; kandidate možete pregledati na listi SOCKS5 proksija. Primjer koristi transport samog net/http-a; druga Go biblioteka može imati drugačije ponašanje.

Ipak treba razlikovati dva naziva. Numerička adresa proksija ne zahtijeva pronalaženje njegovog hosta; proksi s nazivom mora se pronaći lokalno prije slanja SOCKS zahtjeva. Numeričko odredište nema naziv za razrješavanje i ne može pokazati obradu naziva hosta. Za provjeru stvarnog SOCKS izbora pogledajte nosi li polje odredišta naziv ili adresu.

Standardni transport podržava proksi šeme http, https, socks5 i socks5h. Opća oznaka SOCKS ne potvrđuje podršku za SOCKS5 na krajnjoj tački. Ovaj primjer šalje HTTP preko TCP-a i ne testira druge SOCKS naredbe niti UDP prosljeđivanje.

Povezani članci