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 نى ساقلاڭ.
خېرىدارنىڭ ۋاقىت چەكلىمىسى پەقەت socket ئېچىشنىلا ئەمەس، جاۋاب گەۋدىسىنى ئوقۇشنى ئۆز ئىچىگە ئالغان تەلەپ ھايات دەۋرىنىمۇ چەكلەيدۇ. Get قايتقاندىن كېيىنمۇ ئوقۇش خاتالىقلىرى بىر تەرەپ قىلىنىشى كېرەك. 403 كە ئوخشاش ھالەت Go transport خاتالىقى ئەمەس؛ شۇڭا StatusCode نى err دىن ئايرىم تەكشۈرۈڭ.