Transport ya mteja wa HTTP wa Go huchagua proksi. Nakili transport ya kawaida kabla ya kuibadili ili watumiaji wengine wa mteja chaguomsingi waendelee na njia zao zilizopo.

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

Anwani ni kishikilia nafasi cha nyaraka. Badilisha kwa IP na porti ya proksi halisi ya HTTP, kwa mfano chaguo kutoka kwenye orodha ya proksi za HTTP. Mfano hutumia maktaba ya kawaida ya Go pekee; ombi hili la HTTP kupitia proksi halihitaji kifurushi cha SOCKS wala kigezo cha mazingira cha mchakato mzima.

Kwa nini usibadili DefaultTransport moja kwa moja?

Transport chaguomsingi inashirikiwa. Kuibadili kunaweza kuathiri msimbo ambao haukuomba kutumia proksi yako, na kuibadili wakati maombi yanaitumia huleta matatizo ya utekelezaji wa pamoja yanayoweza kuepukwa. Transport maalumu hufanya njia kuwa sehemu ya usanidi wa mteja huyu.

http.ProxyURL hurudisha kichaguzi kinachochagua URL iliyotolewa kila wakati. Hii ni tofauti na kichaguzi chaguomsingi cha mazingira kinachozingatia vigezo vya proksi na sheria za kupita bila proksi. Ikiwa unataka kujaribu ingizo moja maalumu la orodha ya HTTP, kichaguzi kilichowekwa wazi huondoa chanzo hiki cha utata.

Funga jibu na utumie mteja tena

Mfano husoma mwili wote wa jibu na kuufunga. Kusoma hadi mwisho husaidia transport kutumia muunganisho tena inapowezekana. Kwa programu inayotuma maombi kadhaa kupitia proksi ileile, hifadhi mteja na transport badala ya kuunda jozi mpya kwa kila ombi.

Kikomo cha muda cha mteja hakihusu kufungua soketi tu; pia huweka kikomo kwa mzunguko wa ombi, ikiwa ni pamoja na kusoma mwili wa jibu. Hitilafu za kusoma bado zinahitaji kushughulikiwa baada ya Get kurudi. Hali kama 403 si hitilafu ya transport ya Go, hivyo kagua StatusCode kando na err.

Makala zinazohusiana