Den Transport vun engem HTTP-Client a Go wielt de Proxy. Klont de Standardtransport, ier Dir en ännert, fir datt aner Benotzer vum Standardclient hir bestoend Route behalen.

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

D’Adress ass e Plazhaler fir Dokumentatioun. Ersetzt se duerch eng richteg IP a Port vun engem HTTP-Proxy, zum Beispill e Kandidat aus der HTTP-Proxy-Lëscht. D’Beispill benotzt nëmmen d’Standardbibliothéik vu Go; fir dës HTTP-Proxy-Ufro ass weder e SOCKS-Pak nach eng Ëmweltvariabel fir de ganze Prozess néideg.

Firwat net DefaultTransport direkt änneren?

De Standardtransport gëtt gedeelt. Eng Ännerung kann Code beaflossen, deen ni Äre Proxy benotze wollt, an Ännerunge wärend Ufroen en notzen, schafen evitéierbar Gläichzäitegkeetsproblemer. En eegene Transport mécht d’Route zu engem Deel vun der Konfiguratioun vun dësem Client.

http.ProxyURL gëtt e Selektor zeréck, deen ëmmer déi uginn URL wielt. Dat ënnerscheet sech vum Standardëmweltselektor, dee Proxyvariabelen an Ëmgeeungsreegele berücksichtegt. Wann Dir ee bestëmmten HTTP-Lëschtenandrag teste wëllt, hëlt den explizitte Selektor dës Quell vun Onkloerheet ewech.

Maacht d’Äntwert zou a benotzt de Client erëm

D’Beispill liest de ganzen Äntwertkierper a mécht en zou. Bis zum Schluss ze liesen hëlleft dem Transport, eng Verbindung erëm ze benotzen, wann dat méiglech ass. Bei méi Ufroen duerch dee selwechte Proxy behalt Dir Client an Transport, amplaz fir all Ufro en neit Puer ze maachen.

Den Timeout vum Client deckt méi wéi d’Opmaache vum Socket; en limitéiert och de Liewenszyklus vun der Ufro, inklusiv dem Liese vum Äntwertkierper. Liesfeeler mussen och nom Zeréckkomme vun Get behandelt ginn. E Status wéi 403 ass kee Go-Transportfeeler, also kontrolléiert StatusCode getrennt vun err.

Ähnlech Artikelen