În transportul HTTP standard din Go 1.27.3, socks5 și socks5h tratează numele destinației la fel. O țintă cu nume de gazdă este trimisă proxy-ului ca nume de gazdă. Schimbarea acestor scheme nu comută între DNS local și la distanță ca î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)
}

Înlocuiți adresa de documentație cu punctul final SOCKS5 propriu; candidați se găsesc în lista de proxy-uri SOCKS5. Exemplul folosește transportul propriu net/http; altă bibliotecă Go poate implementa alt comportament.

Tot trebuie distinse două nume. O adresă numerică de proxy nu necesită căutarea gazdei proxy-ului; un proxy indicat prin nume trebuie găsit local înainte de trimiterea unei cereri SOCKS. O destinație numerică nu are nume de rezolvat și nu demonstrează tratarea numelor de gazdă. Pentru alegerea SOCKS efectivă, verificați dacă câmpul destinației poartă un nume sau o adresă.

Transportul standard acceptă schemele proxy http, https, socks5 și socks5h. O etichetă generică SOCKS nu dovedește suport SOCKS5 la punctul final. Exemplul trimite HTTP peste TCP și nu testează alte comenzi SOCKS sau retransmisie UDP.

Articole similare