Go 1.27.3-வின் நிலையான HTTP transport-இல் socks5 மற்றும் socks5h இலக்குப் பெயர்களை ஒரே விதமாகக் கையாளுகின்றன. புரவலன் பெயரால் குறிப்பிடப்பட்ட இலக்கு, புரவலன் பெயராகவே பதிலிக்கு அனுப்பப்படுகிறது. இந்த scheme-களை மாற்றுவது 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-இன் சொந்த transport-ஐப் பயன்படுத்துகிறது; வேறொரு Go நூலகம் வேறு விதமாகச் செயல்படலாம்.

இருப்பினும் இரண்டு பெயர்களை வேறுபடுத்த வேண்டும். எண் வடிவிலான பதிலி முகவரிக்கு பதிலிப் புரவலன் பெயரைத் தேட வேண்டியதில்லை; பெயரால் குறிப்பிடப்பட்ட பதிலியை SOCKS கோரிக்கை அனுப்புவதற்கு முன் உள்ளூரில் கண்டறிய வேண்டும். எண் வடிவிலான இலக்கில் தீர்மானிக்க வேண்டிய இலக்குப் பெயர் இல்லை; அதனால் புரவலன் பெயர்களைக் கையாளும் விதத்தைக் காட்ட முடியாது. SOCKS உண்மையில் எதைத் தேர்ந்தெடுத்தது என்பதை ஆய்வு செய்ய, இலக்குப் புலத்தில் பெயரா முகவரியா உள்ளது என்பதைப் பார்க்கவும்.

நிலையான transport http, https, socks5 மற்றும் socks5h பதிலி scheme-களை ஆதரிக்கிறது. பொதுவான SOCKS குறிச்சொல், முனைப்புள்ளி SOCKS5-ஐ ஆதரிப்பதை உறுதிப்படுத்தாது. இந்த எடுத்துக்காட்டு TCP வழியாக HTTP-ஐ அனுப்புகிறது; பிற SOCKS கட்டளைகளையோ UDP relay-யையோ சோதிப்பதில்லை.

தொடர்புடைய கட்டுரைகள்