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 дэмждэгийг батлахгүй. Энэ жишээ TCP-ээр HTTP илгээдэг бөгөөд бусад SOCKS тушаал болон UDP дамжуулалтыг шалгахгүй.

Холбоотой нийтлэлүүд