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.

Erlazionatutako artikuluak