Sa karaniwang HTTP transport ng Go 1.27.3, pareho ang paghawak ng socks5 at socks5h sa pangalan ng destinasyon. Ang target na tinukoy bilang hostname ay ipinapadala sa proxy bilang hostname. Ang pagpapalit ng mga scheme na ito ay hindi nagpapalit sa pagitan ng lokal at malayuang DNS gaya sa 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)
}

Palitan ang address para sa dokumentasyon ng sarili mong SOCKS5 endpoint; makakakita ng mga pagpipilian sa listahan ng SOCKS5 proxy. Ginagamit ng halimbawa ang sariling transport ng net/http; maaaring iba ang ipatupad na asal ng ibang Go library.

May dalawang pangalan pa ring kailangang pag-ibahin. Hindi kailangan ng numeric na proxy address ang lookup ng pangalan ng proxy host; ang proxy na tinukoy sa pangalan ay kailangang mahanap nang lokal bago maipadala ang SOCKS request. Walang pangalan ng target na ireresolba ang numeric na destinasyon, kaya hindi nito maipapakita ang paghawak sa hostname. Para suriin ang aktuwal na pinili ng SOCKS, tingnan kung pangalan o address ang laman ng destination field.

Sinusuportahan ng karaniwang transport ang mga proxy scheme na http, https, socks5 at socks5h. Hindi pinatutunayan ng pangkalahatang label na SOCKS na may suporta sa SOCKS5 ang endpoint. Nagpapadala ang halimbawang ito ng HTTP sa TCP at hindi nito sinusubok ang ibang SOCKS command o UDP relaying.

Kaugnay na mga artikulo