Transporturin hjá einum HTTP-klienti í Go velur proxyin. Avrita standardtransportin, áðrenn tú broytir hann, so aðrir brúkarar av standardklientinum varðveita sínar verandi leiðir.

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)
    }
}

Adressan er eitt dømi til skjalfesting. Skift hana út við IP og port hjá einum veruligum HTTP-proxy, til dømis einum valevni úr listanum við HTTP-proxyum. Dømið brúkar bara standardbókasavnið í Go; henda HTTP-proxy-fyrispurningin krevur hvørki ein SOCKS-pakka ella eina umhvørvisvariablu fyri alla tilgongdina.

Hví ikki broyta DefaultTransport beinleiðis?

Standardtransporturin verður deildur. Ein broyting kann ávirka kotu, sum ongantíð bað um at brúka tín proxy, og broytingar, meðan fyrispurningar brúka transportin, skapa óneyðugar samstundis trupulleikar. Ein serstakur transportur ger leiðina til ein part av uppsetingini hjá hesum klientinum.

http.ProxyURL gevur ein veljara, sum altíð velur givnu URL-adressuna. Tað er øðrvísi enn standardveljarin fyri umhvørvið, sum tekur hædd fyri proxyvariablum og undantaksreglum. Vilt tú royna ein ávísan post í HTTP-listanum, tekur tann beinleiðis veljarin hesa óvissuna burtur.

Lat svarið aftur og endurnýt klientin

Dømið les allan svarpartin og letur hann aftur. At lesa til enda hjálpir transportinum at endurnýta sambandið, tá ið tað ber til. Í einum forriti við fleiri fyrispurningum um sama proxy skalt tú varðveita klient og transport heldur enn at gera eitt nýtt par fyri hvønn fyrispurning.

Tíðarmarkið hjá klientinum fevnir um meira enn at opna socketið; tað avmarkar eisini lívsgongdina hjá fyrispurninginum, eisini lesing av svarpartinum. Lesivillur skulu framvegis handfarast, eftir at Get er komið aftur. Ein støða sum 403 er ikki ein Go-transportvilla, so kanna StatusCode fyri seg og err fyri seg.

Skyldar greinar