SOCKS5-gasheernaamoplossing in Go se HTTP-kliënt
Verstaan waarom socks5 en socks5h nie verskillende DNS-modusse in Go se standaard-HTTP-vervoer kies nie.
In Go 1.27.3 se standaard-HTTP-vervoer hanteer socks5 en socks5h bestemmingsname dieselfde. 'n Bestemming met 'n gasheernaam word as 'n gasheernaam na die instaanbediener gestuur. Om dié skemas te wissel, skakel nie tussen plaaslike en afgeleë DNS soos in curl nie.
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)
}
Vervang die dokumentasieadres met jou SOCKS5-eindpunt; kandidate is in die SOCKS5-instaanbedienerlys beskikbaar. Die voorbeeld gebruik net/http se eie vervoer; 'n ander Go-biblioteek kan ander gedrag implementeer.
Daar is steeds twee name om te onderskei. 'n Numeriese instaanbedieneradres verg geen instaanbedienergasheeropsoek nie; 'n benoemde instaanbediener moet plaaslik gevind word voordat 'n SOCKS-versoek gestuur kan word. 'n Numeriese bestemming het geen naam om op te los nie en kan nie gasheernaamhantering demonstreer nie. Kyk vir die werklike SOCKS-keuse of die bestemmingsveld 'n naam of 'n adres bevat.
Die standaardvervoer ondersteun die instaanbedienerskemas http, https, socks5 en socks5h. 'n Algemene SOCKS-etiket bewys nie SOCKS5-ondersteuning by 'n eindpunt nie. Hierdie voorbeeld stuur HTTP oor TCP en toets nie ander SOCKS-opdragte of UDP-herleiding nie.