I standard-HTTP-transporten i Go 1.27.3 behandler socks5 og socks5h målnavn likt. Et mål med vertsnavn sendes til proxyen som vertsnavn. Bytte mellom disse skjemaene veksler ikke mellom lokal og ekstern DNS slik som i 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)
}

Bytt ut dokumentasjonsadressen med ditt SOCKS5-endepunkt; kandidater finnes i listen over SOCKS5-proxyer. Eksemplet bruker transporten til net/http selv; et annet Go-bibliotek kan ha en annen oppførsel.

To navn må likevel skilles. En numerisk proxyadresse krever ikke oppslag av proxyverten; en navngitt proxy må finnes lokalt før en SOCKS-forespørsel kan sendes. Et numerisk mål har ikke noe målnavn å slå opp og viser ikke vertsnavnhåndteringen. For å se det faktiske SOCKS-valget, kontroller om målfeltet inneholder et navn eller en adresse.

Standardtransporten støtter proxyskjemaene http, https, socks5 og socks5h. En generell SOCKS-etikett fastslår ikke SOCKS5-støtte på et endepunkt. Eksemplet sender HTTP over TCP og tester verken andre SOCKS-kommandoer eller UDP-videresending.

Relaterte artikler