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 ಪ್ರಾಕ್ಸಿ ಪಟ್ಟಿಯಿಂದ ಆರಿಸಿದ ಆಯ್ಕೆಯಂತಹ ನಿಜವಾದ HTTP ಪ್ರಾಕ್ಸಿ IP ಮತ್ತು ಪೋರ್ಟ್ನಿಂದ ಅದನ್ನು ಬದಲಿಸಿ. ಉದಾಹರಣೆ Goನ ಮಾನಕ ಲೈಬ್ರರಿ ಮಾತ್ರ ಬಳಸುತ್ತದೆ; ಈ HTTP ಪ್ರಾಕ್ಸಿ ವಿನಂತಿಗೆ SOCKS ಪ್ಯಾಕೇಜ್ ಅಥವಾ ಇಡೀ ಪ್ರಕ್ರಿಯೆಯ ಪರಿಸರ ಚರ ಅಗತ್ಯವಿಲ್ಲ.
DefaultTransport ಅನ್ನು ನೇರವಾಗಿ ಏಕೆ ಬದಲಿಸಬಾರದು?
ಡೀಫಾಲ್ಟ್ transport ಹಂಚಿಕೆಯಾಗಿದೆ. ಅದನ್ನು ಬದಲಿಸಿದರೆ ನಿಮ್ಮ ಪ್ರಾಕ್ಸಿ ಕೇಳದ ಕೋಡ್ನ ವರ್ತನೆಯೂ ಬದಲಾಗಬಹುದು; ವಿನಂತಿಗಳು ಬಳಸುತ್ತಿರುವಾಗ ಬದಲಿಸುವುದು ತಪ್ಪಿಸಬಹುದಾದ ಸಮಕಾಲೀನತೆ ಸಮಸ್ಯೆಗಳನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ. ಸ್ವಂತ transport ಮಾರ್ಗವನ್ನು ಈ ಕ್ಲೈಂಟ್ನ ಸಂರಚನೆಯ ಭಾಗವನ್ನಾಗಿಸುತ್ತದೆ.
http.ProxyURL ಯಾವಾಗಲೂ ನೀಡಿದ URL ಆರಿಸುವ ಆಯ್ಕೆಗಾರವನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ. ಇದು ಪ್ರಾಕ್ಸಿ ಚರಗಳು ಮತ್ತು ಬಿಟ್ಟುಹೋಗುವ ನಿಯಮಗಳನ್ನು ಪರಿಗಣಿಸುವ ಡೀಫಾಲ್ಟ್ ಪರಿಸರ ಆಯ್ಕೆಗಾರಕ್ಕಿಂತ ಬೇರೆ. HTTP ಪಟ್ಟಿಯ ಒಂದು ನಿರ್ದಿಷ್ಟ ದಾಖಲೆಯನ್ನು ಪರೀಕ್ಷಿಸಲು ಬಯಸಿದರೆ ಸ್ಪಷ್ಟ ಆಯ್ಕೆಗಾರ ಈ ಅಸ್ಪಷ್ಟತೆಯ ಮೂಲ ತೆಗೆದುಹಾಕುತ್ತದೆ.
ಪ್ರತಿಕ್ರಿಯೆ ಮುಚ್ಚಿ, ಕ್ಲೈಂಟ್ ಮರುಬಳಸಿ
ಉದಾಹರಣೆ ಪ್ರತಿಕ್ರಿಯೆಯ ಬಾಡಿಯನ್ನು ಪೂರ್ಣ ಓದಿ ಮುಚ್ಚುತ್ತದೆ. ಕೊನೆಯವರೆಗೆ ಓದುವುದು transportಗೆ ಸಾಧ್ಯವಿದ್ದಾಗ ಸಂಪರ್ಕ ಮರುಬಳಸಲು ನೆರವಾಗುತ್ತದೆ. ಒಂದೇ ಪ್ರಾಕ್ಸಿಯ ಮೂಲಕ ಹಲವು ವಿನಂತಿ ಮಾಡುವ ಪ್ರೋಗ್ರಾಂನಲ್ಲಿ ಪ್ರತಿ ಸಲ ಹೊಸ ಜೋಡಿ ಮಾಡದೆ ಕ್ಲೈಂಟ್ ಮತ್ತು transport ಉಳಿಸಿಕೊಳ್ಳಿ.
ಕ್ಲೈಂಟ್ನ ಕಾಲಮಿತಿ ಸಾಕೆಟ್ ತೆರೆಯುವುದಷ್ಟೇ ಅಲ್ಲ, ಪ್ರತಿಕ್ರಿಯೆ ಬಾಡಿ ಓದುವುದು ಸೇರಿದಂತೆ ವಿನಂತಿಯ ಜೀವನಚಕ್ರವನ್ನೂ ಮಿತಿಗೊಳಿಸುತ್ತದೆ. Get ಹಿಂತಿರುಗಿದ ನಂತರವೂ ಓದುವ ದೋಷ ನಿರ್ವಹಿಸಬೇಕು. 403ನಂತಹ ಸ್ಥಿತಿ Go transport ದೋಷವಲ್ಲ, ಆದ್ದರಿಂದ StatusCode ಮತ್ತು err ಪ್ರತ್ಯೇಕವಾಗಿ ಪರಿಶೀಲಿಸಿ.