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.

Əlaqəli məqalələr