SOCKS5-vertsnavnoppslag i Gos HTTP-klient
Hvorfor socks5 og socks5h ikke velger ulike DNS-moduser i Gos standard-HTTP-transport.
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.