Go 1.27.3 के मानक HTTP ट्रांसपोर्ट में socks5 और socks5h गंतव्य के नामों को एक ही तरह संभालते हैं। होस्टनाम से दिया गया लक्ष्य प्रॉक्सी को होस्टनाम के रूप में ही भेजा जाता है। इन स्कीमों को बदलने से curl की तरह स्थानीय और दूरस्थ DNS के बीच बदलाव नहीं होता।

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 समर्थन साबित नहीं करता। यह उदाहरण TCP पर HTTP भेजता है और न अन्य SOCKS कमांड जाँचता है, न UDP रिले।

संबंधित लेख