It transport fan in Go-HTTP-kliïnt kiest de proxy. Kloan it standerttransport foardatst it wizigest, sadat oare brûkers fan de standertkliïnt harren besteande rûte hâlde.

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

It adres is in dokumintaasjefoarbyld. Ferfang it troch IP en poarte fan in echte HTTP-proxy, bygelyks in kandidaat út de list mei HTTP-proxy's. It foarbyld brûkt allinnich Go syn standertbibleteek; foar dit HTTP-proxyfersyk is gjin SOCKS-pakket of prosesbrede omjouwingsfariabele nedich.

Wêrom DefaultTransport net direkt wizigje?

It standerttransport wurdt dield. In wiziging kin koade beynfloedzje dy't nea om dyn proxy frege hat. Wizigjen wylst fersiken it transport brûke, soarget ek foar te foarkommen problemen mei tagelyk gebrûk. In eigen transport makket de rûte ûnderdiel fan de ynstelling fan dizze kliïnt.

http.ProxyURL jout in selektor werom dy't altyd de opjûne URL kiest. Dat ferskilt fan de standert omjouwingsselektor, dy't rekken hâldt mei proxyfariabelen en útsûnderingsregels. Wolst ien spesifyk item út de HTTP-list teste, dan nimt de eksplisite selektor dizze boarne fan ûndúdlikens fuort.

Slút it antwurd en brûk de kliïnt opnij

It foarbyld lêst de antwurdbody hielendal út en slút dy. Folslein útlêzen helpt it transport de ferbining opnij te brûken as dat kin. Bewarje by ferskate fersiken troch deselde proxy de kliïnt en it transport ynstee fan foar elk fersyk in nij pear te meitsjen.

De time-out fan de kliïnt beheint net allinnich it iepenjen fan de socket, mar ek de libbenssyklus fan it fersyk, mei it lêzen fan de antwurdbody. Lêsflaters moatte ek nei weromkomst fan Get ôfhannele wurde. In status lykas 403 is gjin Go-transportflater, dus kontrolearje StatusCode los fan err.

Relatearre artikelen