Go 1.27.3 стандартты HTTP транспортында socks5 пен socks5h мақсат атауларын бірдей өңдейді. Хост атауымен берілген мақсат проксиге хост атауы ретінде жіберіледі. Осы схемаларды ауыстыру curl-дегідей жергілікті және қашықтағы DNS арасында ауыстырмайды.

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)
}

Құжаттамаға арналған мекенжайды өз SOCKS5 соңғы нүктеңізбен ауыстырыңыз; нұсқаларды SOCKS5 проксилер тізімінен көруге болады. Мысалда net/http пакетінің өз транспорты қолданылады; басқа Go кітапханасы басқаша жұмыс істеуі мүмкін.

Дегенмен екі атауды ажырату қажет. Проксидің сандық мекенжайы прокси хостын іздеуді қажет етпейді; атаумен берілген проксиді SOCKS сұрауын жібермес бұрын жергілікті түрде табу керек. Сандық мақсаттың шешілетін атауы жоқ, сондықтан ол хост атауының қалай өңделетінін көрсете алмайды. SOCKS нақты нені таңдағанын тексеру үшін мақсат өрісінде атау ма, әлде мекенжай ма тұрғанын қараңыз.

Стандартты транспорт http, https, socks5 және socks5h прокси схемаларын қолдайды. Жалпы SOCKS белгісі соңғы нүктенің SOCKS5 қолдайтынын дәлелдемейді. Бұл мысал HTTP-ді TCP арқылы жібереді және басқа SOCKS командаларын да, UDP ретрансляциясын да тексермейді.

Қатысты мақалалар