Im Standard-HTTP-Transport von Go 1.27.3 behandeln socks5 und socks5h Zielnamen gleich. Ein als Hostname angegebenes Ziel wird als Hostname an den Proxy gesendet. Der Wechsel dieser Schemas schaltet nicht wie bei curl zwischen lokalem und entferntem DNS um.

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

Ersetzen Sie die Dokumentationsadresse durch Ihren SOCKS5-Endpunkt; Kandidaten finden Sie in der SOCKS5-Proxy-Liste. Das Beispiel verwendet den eigenen Transport von net/http; eine andere Go-Bibliothek kann sich anders verhalten.

Zwei Namen sind trotzdem zu unterscheiden. Eine numerische Proxyadresse erfordert keine Auflösung des Proxyhosts; ein benannter Proxy muss lokal gefunden werden, bevor eine SOCKS-Anfrage gesendet werden kann. Ein numerisches Ziel hat keinen aufzulösenden Zielnamen und kann die Hostnamenbehandlung nicht belegen. Prüfen Sie für die tatsächliche SOCKS-Auswahl, ob das Zielfeld einen Namen oder eine Adresse enthält.

Der Standardtransport unterstützt die Proxyschemas http, https, socks5 und socks5h. Die allgemeine Bezeichnung SOCKS belegt keine SOCKS5-Unterstützung des Endpunkts. Dieses Beispiel sendet HTTP über TCP und testet weder andere SOCKS-Befehle noch UDP-Weiterleitung.

Ähnliche Artikel