Go HTTP கிளையன்ட்டில் SOCKS5 புரவலன் பெயர் தீர்மானம்
Go-வின் நிலையான HTTP transport-இல் socks5 மற்றும் socks5h வெவ்வேறு DNS முறைகளை ஏன் தேர்ந்தெடுப்பதில்லை என்பதை அறிக.
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-யையோ சோதிப்பதில்லை.