SOCKS5-gastignoma solvado en la HTTP-kliento de Go
Kial socks5 kaj socks5h ne elektas malsamajn DNS-reĝimojn en la norma HTTP-transporto de Go.
En la norma HTTP-transporto de Go 1.27.3, socks5 kaj socks5h same traktas celajn nomojn. Celo kun gastignomo estas sendata kiel gastignomo al la prokurilo. Ŝanĝi tiujn skemojn ne ŝaltas inter loka kaj fora DNS kiel en 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)
}
Anstataŭigu la dokumentan adreson per via SOCKS5-finpunkto; kandidatojn vi povas serĉi en la listo de SOCKS5-prokuriloj. La ekzemplo uzas la propran transporton de net/http; alia Go-biblioteko povas efektivigi alian konduton.
Ankoraŭ estas du nomoj por distingi. Numera prokurila adreso ne postulas serĉon de la prokurila gastiganto; nomita prokurilo devas esti trovita loke antaŭ ol SOCKS-peto povas esti sendita. Numera celo ne havas celan nomon por solvi kaj ne povas montri gastignoman traktadon. Por inspekti la efektivan SOCKS-elekton, kontrolu ĉu la celkampo portas nomon aŭ adreson.
La norma transporto subtenas la prokurilajn skemojn http, https, socks5 kaj socks5h. Ĝenerala SOCKS-etikedo ne pruvas SOCKS5-subtenon ĉe finpunkto. Ĉi tiu ekzemplo sendas HTTP super TCP kaj provas nek aliajn SOCKS-komandojn nek UDP-relajson.