في ناقل HTTP القياسي في Go 1.27.3، يعالج 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.

مقالات ذات صلة