V standardnem transportu HTTP za Go 1.27.3 socks5 in socks5h enako obdelata ime cilja. Cilj z imenom gostitelja se posredniku pošlje kot ime gostitelja. Menjava teh shem ne preklopi med lokalnim in oddaljenim DNS kot v 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)
}

Dokumentacijski naslov zamenjajte s svojo končno točko SOCKS5; kandidate najdete na seznamu posrednikov SOCKS5. Primer uporablja transport samega net/http; druga knjižnica Go lahko deluje drugače.

Še vedno je treba razlikovati dve imeni. Številčni naslov posrednika ne potrebuje iskanja gostitelja posrednika; posrednik z imenom mora biti najden lokalno pred pošiljanjem zahteve SOCKS. Številčni cilj nima imena za razrešitev in ne more pokazati obdelave imen gostiteljev. Za dejansko izbiro SOCKS preverite, ali polje cilja vsebuje ime ali naslov.

Standardni transport podpira sheme posrednika http, https, socks5 in socks5h. Splošna oznaka SOCKS ne dokazuje podpore SOCKS5 na končni točki. Primer pošilja HTTP prek TCP in ne preizkuša drugih ukazov SOCKS ali posredovanja UDP.

Sorodni članki