It-transport tal-klijent HTTP f’Go jagħżel il-proxy. Ikklona t-transport standard qabel tibdlu biex utenti oħra tal-klijent predefinit iżommu r-rotot eżistenti tagħhom.

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

L-indirizz hu placeholder għad-dokumentazzjoni. Ibdel b’IP u port ta’ proxy HTTP reali, bħal kandidat mil-lista ta’ proxies HTTP. L-eżempju juża biss il-librerija standard ta’ Go; din it-talba permezz ta’ proxy HTTP ma teħtieġx pakkett SOCKS jew varjabbli tal-ambjent għall-proċess kollu.

Għaliex ma tbiddilx DefaultTransport direttament?

It-transport predefinit hu kondiviż. Tibdil fih jista’ jaffettwa kodiċi li qatt ma talab il-proxy tiegħek, u tibdil waqt li talbiet qed jużawh joħloq problemi ta’ konkorrenza li jistgħu jiġu evitati. Transport dedikat jagħmel ir-rotta parti mill-konfigurazzjoni ta’ dan il-klijent.

http.ProxyURL jirritorna selettur li dejjem jagħżel il-URL mogħti. Dan hu differenti mis-selettur tal-ambjent predefinit, li jqis varjabbli tal-proxy u regoli ta’ bypass. Jekk trid tittestja entrata waħda speċifika mil-lista HTTP, is-selettur espliċitu jneħħi dan is-sors ta’ ambigwità.

Agħlaq ir-risposta u erġa’ uża l-klijent

L-eżempju jaqra l-ġisem kollu tar-risposta u jagħlqu. Qari sal-aħħar jgħin lit-transport jerġa’ juża konnessjoni meta jista’. Fi programm b’diversi talbiet mill-istess proxy, żomm il-klijent u t-transport minflok toħloq par ġdid għal kull talba.

Il-limitu tal-ħin tal-klijent ma jkoprix biss il-ftuħ tas-socket; jillimita wkoll iċ-ċiklu tal-ħajja tat-talba, inkluż il-qari tal-ġisem tar-risposta. Żbalji tal-qari xorta jridu jiġu mmaniġġjati wara r-ritorn ta’ Get. Status bħal 403 mhuwiex żball tat-transport ta’ Go, għalhekk iċċekkja StatusCode separatament minn err.

Artikli relatati