Go ਦੇ HTTP ਕਲਾਇੰਟ ਵਿੱਚ SOCKS5 ਹੋਸਟਨਾਮ ਰੈਜ਼ੋਲੂਸ਼ਨ
ਸਮਝੋ ਕਿ Go ਦੇ ਮਿਆਰੀ HTTP ਟ੍ਰਾਂਸਪੋਰਟ ਵਿੱਚ socks5 ਅਤੇ socks5h ਵੱਖਰੇ DNS ਮੋਡ ਕਿਉਂ ਨਹੀਂ ਚੁਣਦੇ।
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 ਰਿਲੇ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰਦੀ।