’n Go-HTTP-kliënt se vervoer kies die instaanbediener. Kloon die standaardvervoer voordat jy dit verander sodat ander gebruikers van die verstekkliënt hul bestaande roetes behou.

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

Die adres is ’n dokumentasieplekhouer. Vervang dit met die IP en poort van ’n werklike HTTP-instaanbediener, soos ’n kandidaat uit die HTTP-instaanbedienerlys. Die voorbeeld gebruik net Go se standaardbiblioteek; geen SOCKS-pakket of proseswye omgewingsveranderlike is vir hierdie HTTP-instaanbedienerversoek nodig nie.

Waarom nie DefaultTransport direk verander nie?

Die verstekvervoer word gedeel. Om dit te verander, kan kode beïnvloed wat nooit jou instaanbediener wou gebruik nie. Veranderings terwyl versoeke dit gebruik, skep ook vermybare gelyktydigheidsprobleme. ’n Toegewyde vervoer maak die roete deel van hierdie kliënt se opstelling.

http.ProxyURL gee ’n kieser terug wat deurgaans die gegewe URL kies. Dit verskil van die verstekomgewingskieser wat instaanbedienerveranderlikes en omseilreëls oorweeg. As jy een spesifieke HTTP-lysinskrywing wil toets, verwyder die uitdruklike kieser hierdie bron van dubbelsinnigheid.

Sluit die antwoord en hergebruik die kliënt

Die voorbeeld lees die hele antwoordliggaam en sluit dit. Volledig lees help die vervoer om ’n verbinding te hergebruik wanneer dit kan. In ’n program met verskeie versoeke deur dieselfde instaanbediener, behou die kliënt en vervoer eerder as om vir elke versoek ’n nuwe paar te bou.

Die kliënt se uitteltyd dek meer as die oopmaak van die sok: dit beperk ook die versoek se lewensiklus, insluitend die lees van die antwoordliggaam. Leesfoute moet steeds hanteer word nadat Get teruggekeer het. ’n Status soos 403 is nie ’n Go-vervoerfout nie; ondersoek dus StatusCode apart van err.

Verwante artikels