Në transportin standard HTTP të Go 1.27.3, socks5 dhe socks5h i trajtojnë emrat e destinacionit njësoj. Një objektiv me emër hosti i dërgohet proxy-t si emër hosti. Ndryshimi i këtyre skemave nuk kalon mes DNS lokale dhe të largët si në curl.

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

Zëvendësoni adresën e dokumentacionit me pikën tuaj fundore SOCKS5; kandidatët gjenden në listën e proxy-ve SOCKS5. Shembulli përdor transportin e vetë net/http; bibliotekë tjetër Go mund të sillet ndryshe.

Sërish duhen dalluar dy emra. Adresa numerike e proxy-t nuk kërkon kërkim të hostit proxy; proxy me emër duhet gjetur lokalisht para dërgimit të kërkesës SOCKS. Destinacioni numerik nuk ka emër për t’u zgjidhur dhe nuk demonstron trajtimin e emrave të hostit. Për zgjedhjen reale SOCKS, shikoni nëse fusha e destinacionit mban emër apo adresë.

Transporti standard mbështet skemat proxy http, https, socks5 dhe socks5h. Etiketa e përgjithshme SOCKS nuk provon mbështetje SOCKS5 në pikën fundore. Ky shembull dërgon HTTP mbi TCP dhe nuk teston komanda të tjera SOCKS ose transmetim UDP.

Artikuj të ngjashëm