Go HTTP müştərisində SOCKS5 host adının həlli
Go-nun standart HTTP nəqlində socks5 və socks5h-nin niyə fərqli DNS rejimləri seçmədiyini anlayın.
Go 1.27.3-ün standart HTTP nəqlində socks5 və socks5h hədəf adını eyni cür emal edir. Host adı olan hədəf proksiyə host adı kimi göndərilir. Bu sxemləri dəyişmək curl-dakı kimi yerli və uzaq DNS arasında keçid etmir.
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)
}
Sənədləşdirmə ünvanını öz SOCKS5 son nöqtənizlə əvəz edin; namizədləri SOCKS5 proksi siyahısında görə bilərsiniz. Nümunə net/http-nin öz nəqlindən istifadə edir; başqa Go kitabxanası fərqli davrana bilər.
Yenə də iki adı ayırmaq lazımdır. Rəqəmsal proksi ünvanı proksi hostunun axtarışını tələb etmir; adı olan proksi isə SOCKS sorğusundan əvvəl yerli olaraq tapılmalıdır. Rəqəmsal hədəfin həll ediləcək adı yoxdur və host adı emalını göstərə bilməz. Həqiqi SOCKS seçimini araşdırmaq üçün hədəf sahəsində ad, yoxsa ünvan olduğunu yoxlayın.
Standart nəql http, https, socks5 və socks5h proksi sxemlərini dəstəkləyir. Ümumi SOCKS etiketi son nöqtənin SOCKS5 dəstəklədiyini sübut etmir. Bu nümunə TCP üzərindən HTTP göndərir, başqa SOCKS əmrlərini və UDP ötürməsini sınaqdan keçirmir.