W standardowym transporcie HTTP Go 1.27.3 schematy socks5 i socks5h obsługują nazwy celów tak samo. Cel z nazwą hosta jest przesyłany do proxy jako nazwa hosta. Zmiana tych schematów nie przełącza między lokalnym a zdalnym DNS tak jak w 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)
}

Zastąp adres dokumentacyjny swoim punktem SOCKS5; kandydatów można przeglądać na liście proxy SOCKS5. Przykład używa własnego transportu net/http; inna biblioteka Go może działać inaczej.

Nadal trzeba odróżnić dwie nazwy. Numeryczny adres proxy nie wymaga wyszukania jego hosta; proxy wskazane nazwą musi zostać znalezione lokalnie przed wysłaniem żądania SOCKS. Numeryczny cel nie ma nazwy do rozwiązania i nie pokazuje obsługi nazw hostów. Aby sprawdzić faktyczny wybór SOCKS, zobacz, czy pole celu zawiera nazwę, czy adres.

Standardowy transport obsługuje schematy proxy http, https, socks5 i socks5h. Ogólna etykieta SOCKS nie dowodzi obsługi SOCKS5 w punkcie końcowym. Ten przykład wysyła HTTP po TCP i nie testuje innych poleceń SOCKS ani przekazywania UDP.

Powiązane artykuły