Go HTTP ਕਲਾਇੰਟ ਨੂੰ ਆਪਣਾ ਵੱਖਰਾ ਪ੍ਰਾਕਸੀ ਦਿਓ
Go ਦਾ ਡਿਫਾਲਟ transport ਕਲੋਨ ਕਰੋ, ਚੁਣੇ IP ਲਈ ProxyURL ਸੈਟ ਕਰੋ ਅਤੇ ਹੋਰ ਕਲਾਇੰਟਾਂ ਦਾ ਪ੍ਰਾਕਸੀ ਵਰਤਾਰਾ ਨਾ ਬਦਲੋ।
Go HTTP ਕਲਾਇੰਟ ਦਾ transport ਪ੍ਰਾਕਸੀ ਚੁਣਦਾ ਹੈ। ਮਿਆਰੀ transport ਬਦਲਣ ਤੋਂ ਪਹਿਲਾਂ ਕਲੋਨ ਕਰੋ ਤਾਂ ਜੋ ਡਿਫਾਲਟ ਕਲਾਇੰਟ ਦੇ ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਦੀ ਮੌਜੂਦਾ ਰੂਟਿੰਗ ਬਣੀ ਰਹੇ।
package main
import (
"fmt"
"io"
"log"
"net/http"
"net/url"
"time"
)
func main() {
proxyURL, err := url.Parse("http://203.0.113.10:8080")
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)
if _, err := io.Copy(io.Discard, response.Body); err != nil {
log.Fatal(err)
}
}
ਪਤਾ ਦਸਤਾਵੇਜ਼ਾਂ ਦੀ ਮਿਸਾਲ ਹੈ। ਇਸ ਦੀ ਥਾਂ ਅਸਲ HTTP ਪ੍ਰਾਕਸੀ ਦਾ IP ਅਤੇ ਪੋਰਟ ਰੱਖੋ, ਜਿਵੇਂ HTTP ਪ੍ਰਾਕਸੀ ਸੂਚੀ ਵਿੱਚੋਂ ਚੁਣੀ ਸੰਭਾਵੀ ਚੋਣ। ਮਿਸਾਲ ਸਿਰਫ਼ Go ਦੀ ਮਿਆਰੀ ਲਾਇਬ੍ਰੇਰੀ ਵਰਤਦੀ ਹੈ; ਇਸ HTTP ਪ੍ਰਾਕਸੀ ਬੇਨਤੀ ਲਈ SOCKS ਪੈਕੇਜ ਜਾਂ ਸਾਰੇ ਪ੍ਰੋਸੈਸ ਦਾ ਵਾਤਾਵਰਨ ਵੇਰੀਏਬਲ ਨਹੀਂ ਚਾਹੀਦਾ।
DefaultTransport ਨੂੰ ਸਿੱਧਾ ਕਿਉਂ ਨਾ ਬਦਲੀਏ?
ਡਿਫਾਲਟ transport ਸਾਂਝਾ ਹੁੰਦਾ ਹੈ। ਉਸ ਨੂੰ ਬਦਲਣ ਨਾਲ ਉਸ ਕੋਡ ਦਾ ਵਰਤਾਰਾ ਵੀ ਬਦਲ ਸਕਦਾ ਹੈ ਜਿਸ ਨੇ ਤੁਹਾਡਾ ਪ੍ਰਾਕਸੀ ਕਦੇ ਮੰਗਿਆ ਨਹੀਂ। ਬੇਨਤੀਆਂ ਦੇ ਵਰਤਣ ਦੌਰਾਨ ਬਦਲਾਅ ਕਰਨ ਨਾਲ ਟਾਲੇ ਜਾ ਸਕਣ ਵਾਲੇ ਸਮਕਾਲੀ ਮਸਲੇ ਵੀ ਬਣਦੇ ਹਨ। ਵੱਖਰਾ transport ਰਸਤੇ ਨੂੰ ਇਸ ਕਲਾਇੰਟ ਦੀ ਸੰਰਚਨਾ ਦਾ ਹਿੱਸਾ ਬਣਾਉਂਦਾ ਹੈ।
http.ProxyURL ਅਜਿਹਾ ਚੋਣਕਾਰ ਵਾਪਸ ਕਰਦਾ ਹੈ ਜੋ ਹਮੇਸ਼ਾ ਦਿੱਤਾ URL ਚੁਣਦਾ ਹੈ। ਇਹ ਡਿਫਾਲਟ ਵਾਤਾਵਰਨ ਚੋਣਕਾਰ ਤੋਂ ਵੱਖਰਾ ਹੈ, ਜੋ ਪ੍ਰਾਕਸੀ ਵੇਰੀਏਬਲ ਅਤੇ ਬਾਈਪਾਸ ਨਿਯਮ ਦੇਖਦਾ ਹੈ। ਜੇ HTTP ਸੂਚੀ ਦੀ ਇੱਕ ਖ਼ਾਸ ਐਂਟਰੀ ਜਾਂਚਣੀ ਹੋਵੇ ਤਾਂ ਸਪਸ਼ਟ ਚੋਣਕਾਰ ਅਸਪਸ਼ਟਤਾ ਦਾ ਇਹ ਸਰੋਤ ਹਟਾਉਂਦਾ ਹੈ।
ਜਵਾਬ ਬੰਦ ਕਰੋ ਅਤੇ ਕਲਾਇੰਟ ਮੁੜ ਵਰਤੋ
ਮਿਸਾਲ ਜਵਾਬ ਦੀ ਬਾਡੀ ਪੂਰੀ ਪੜ੍ਹ ਕੇ ਬੰਦ ਕਰਦੀ ਹੈ। ਅੰਤ ਤੱਕ ਪੜ੍ਹਨ ਨਾਲ transport ਨੂੰ ਹੋ ਸਕਣ ਉੱਤੇ ਕਨੈਕਸ਼ਨ ਮੁੜ ਵਰਤਣ ਵਿੱਚ ਮਦਦ ਮਿਲਦੀ ਹੈ। ਇੱਕੋ ਪ੍ਰਾਕਸੀ ਰਾਹੀਂ ਕਈ ਬੇਨਤੀਆਂ ਕਰਨ ਵਾਲੇ ਪ੍ਰੋਗਰਾਮ ਵਿੱਚ ਹਰ ਵਾਰ ਨਵਾਂ ਜੋੜਾ ਬਣਾਉਣ ਦੀ ਥਾਂ ਕਲਾਇੰਟ ਅਤੇ transport ਰੱਖੋ।
ਕਲਾਇੰਟ ਦਾ ਸਮਾਂ ਸਿਰਫ਼ ਸਾਕਟ ਖੋਲ੍ਹਣ ਤੱਕ ਸੀਮਤ ਨਹੀਂ; ਇਹ ਜਵਾਬ ਦੀ ਬਾਡੀ ਪੜ੍ਹਨ ਸਮੇਤ ਬੇਨਤੀ ਦੇ ਜੀਵਨ ਚੱਕਰ ਨੂੰ ਵੀ ਸੀਮਤ ਕਰਦਾ ਹੈ। Get ਵਾਪਸ ਆਉਣ ਤੋਂ ਬਾਅਦ ਵੀ ਪੜ੍ਹਨ ਦੀਆਂ ਗਲਤੀਆਂ ਸੰਭਾਲਣੀਆਂ ਪੈਂਦੀਆਂ ਹਨ। 403 ਵਰਗਾ ਸਟੇਟਸ Go transport ਦੀ ਗਲਤੀ ਨਹੀਂ, ਇਸ ਲਈ StatusCode ਨੂੰ err ਤੋਂ ਵੱਖਰਾ ਜਾਂਚੋ।