Agħti proxy separat lil klijent HTTP f’Go
Ikklona t-transport predefinit ta’ Go, issettja ProxyURL għall-IP magħżul u evita li tibdel l-imġiba ta’ klijenti oħra.
It-transport tal-klijent HTTP f’Go jagħżel il-proxy. Ikklona t-transport standard qabel tibdlu biex utenti oħra tal-klijent predefinit iżommu r-rotot eżistenti tagħhom.
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)
}
}
L-indirizz hu placeholder għad-dokumentazzjoni. Ibdel b’IP u port ta’ proxy HTTP reali, bħal kandidat mil-lista ta’ proxies HTTP. L-eżempju juża biss il-librerija standard ta’ Go; din it-talba permezz ta’ proxy HTTP ma teħtieġx pakkett SOCKS jew varjabbli tal-ambjent għall-proċess kollu.
Għaliex ma tbiddilx DefaultTransport direttament?
It-transport predefinit hu kondiviż. Tibdil fih jista’ jaffettwa kodiċi li qatt ma talab il-proxy tiegħek, u tibdil waqt li talbiet qed jużawh joħloq problemi ta’ konkorrenza li jistgħu jiġu evitati. Transport dedikat jagħmel ir-rotta parti mill-konfigurazzjoni ta’ dan il-klijent.
http.ProxyURL jirritorna selettur li dejjem jagħżel il-URL mogħti. Dan hu differenti mis-selettur tal-ambjent predefinit, li jqis varjabbli tal-proxy u regoli ta’ bypass. Jekk trid tittestja entrata waħda speċifika mil-lista HTTP, is-selettur espliċitu jneħħi dan is-sors ta’ ambigwità.
Agħlaq ir-risposta u erġa’ uża l-klijent
L-eżempju jaqra l-ġisem kollu tar-risposta u jagħlqu. Qari sal-aħħar jgħin lit-transport jerġa’ juża konnessjoni meta jista’. Fi programm b’diversi talbiet mill-istess proxy, żomm il-klijent u t-transport minflok toħloq par ġdid għal kull talba.
Il-limitu tal-ħin tal-klijent ma jkoprix biss il-ftuħ tas-socket; jillimita wkoll iċ-ċiklu tal-ħajja tat-talba, inkluż il-qari tal-ġisem tar-risposta. Żbalji tal-qari xorta jridu jiġu mmaniġġjati wara r-ritorn ta’ Get. Status bħal 403 mhuwiex żball tat-transport ta’ Go, għalhekk iċċekkja StatusCode separatament minn err.