Go 1.27.3-ի ստանդարտ HTTP տրանսպորտում socks5-ն ու socks5h-ն նպատակակետի անունները մշակում են նույն կերպ։ Հոսթանունով տրված նպատակակետը պրոքսիին ուղարկվում է որպես հոսթանուն։ Այս սխեմաների փոխարկումը չի փոխարկում տեղային և հեռավոր DNS-ը, ինչպես 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)
}

Փաստաթղթավորման համար նախատեսված հասցեն փոխարինեք ձեր SOCKS5 վերջնակետով․ հնարավոր տարբերակները կարող եք դիտել SOCKS5 պրոքսիների ցանկում։ Օրինակը օգտագործում է հենց net/http-ի տրանսպորտը․ Go-ի մեկ այլ գրադարան կարող է այլ վարքագիծ իրականացնել։

Այնուամենայնիվ, պետք է տարբերակել երկու անուն։ Պրոքսիի թվային հասցեն պրոքսի հոսթի անվան որոնում չի պահանջում․ անունով տրված պրոքսին պետք է գտնվի տեղային եղանակով՝ նախքան SOCKS հարցումն ուղարկելը։ Թվային նպատակակետը լուծելու անուն չունի և չի կարող ցուցադրել հոսթանունների մշակումը։ SOCKS-ի իրական ընտրությունն ուսումնասիրելու համար ստուգեք՝ նպատակակետի դաշտը անուն է պարունակում, թե հասցե։

Ստանդարտ տրանսպորտը աջակցում է http, https, socks5 և socks5h պրոքսի սխեմաներին։ Ընդհանուր SOCKS պիտակը չի հաստատում, որ վերջնակետը աջակցում է SOCKS5-ին։ Այս օրինակը HTTP է ուղարկում TCP-ով և չի ստուգում SOCKS-ի այլ հրամանները կամ UDP-ի փոխանցումը։

Առնչվող հոդվածներ