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 रिले परीक्षण गर्दैन।

सम्बन्धित लेखहरू