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 রিলে পরীক্ষা করে না।

সম্পর্কিত নিবন্ধ