Proxy propioa Go HTTP bezero batentzat
Klonatu Go-ren transport lehenetsia, ezarri ProxyURL aukeratutako proxy IPrako eta ez aldatu beste bezeroen portaera.
Go HTTP bezeroaren transport-ak aukeratzen du proxya. Klonatu transport estandarra aldatu aurretik, bezero lehenetsiaren beste erabiltzaileek lehengo bideak mantendu ditzaten.
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)
}
}
Helbidea dokumentazioko leku-marka da. Ordeztu benetako HTTP proxy baten IParekin eta atakarekin, adibidez HTTP proxyen zerrendatik hautatutako hautagai batekin. Adibideak Go-ren liburutegi estandarra soilik erabiltzen du; HTTP proxy-eskaera honetarako ez da SOCKS paketerik edo prozesu osoko ingurune-aldagairik behar.
Zergatik ez aldatu DefaultTransport zuzenean?
Transport lehenetsia partekatua da. Hura aldatzeak zure proxya eskatu ez duen kodeari eragin diezaioke; eskaerak hura erabiltzen ari diren bitartean aldatzeak saihestu daitezkeen konkurrentzia-arazoak sortzen ditu. Transport propio batek bidea bezero honen konfigurazioaren parte egiten du.
http.ProxyURL funtzioak emandako URLa beti aukeratzen duen hautatzailea itzultzen du. Inguruneko hautatzaile lehenetsiak, aldiz, proxy-aldagaiak eta saiheste-arauak kontuan hartzen ditu. HTTP zerrendako sarrera zehatz bat probatu nahi baduzu, hautatzaile esplizituak anbiguotasun-iturri hori kentzen du.
Itxi erantzuna eta berrerabili bezeroa
Adibideak erantzunaren gorputza osorik irakurri eta ixten du. Amaieraraino irakurtzeak transport-ari konexioa berrerabiltzen laguntzen dio, ahal denean. Programa batek proxy beraren bidez hainbat eskaera egiten baditu, mantendu bezeroa eta transport-a, eskaera bakoitzeko bikote berria sortu beharrean.
Bezeroaren denbora-mugak socketa irekitzea baino gehiago hartzen du: eskaeraren bizi-zikloa ere mugatzen du, erantzunaren gorputza irakurtzea barne. Irakurketa-erroreak Get itzuli ondoren ere kudeatu behar dira. 403 bezalako egoera ez da Go transport-errorea; beraz, egiaztatu StatusCode eta err bereizita.