Transport HTTP-biðlara í Go velur proxy. Klónaðu staðlaða transportinn áður en þú breytir honum svo aðrir notendur sjálfgefna biðlarans haldi sínum fyrri leiðum.

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

Slóðin er staðgengill fyrir skjölun. Skiptu henni út fyrir IP og tengi raunverulegs HTTP-proxy, til dæmis valkost af HTTP-proxy-listanum. Dæmið notar aðeins staðalsafn Go; þessi HTTP-proxy-beiðni þarf hvorki SOCKS-pakka né umhverfisbreytu fyrir allt ferlið.

Af hverju ekki að breyta DefaultTransport beint?

Sjálfgefna transportinum er deilt. Breyting getur haft áhrif á kóða sem bað aldrei um að nota þinn proxy. Að breyta transporti meðan beiðnir nota hann skapar líka óþarfa samhliða vinnsluvandamál. Sérstakur transport gerir leiðina að hluta af stillingum þessa biðlara.

http.ProxyURL skilar veljara sem velur alltaf uppgefna URL-slóð. Það er ólíkt sjálfgefna umhverfisveljaranum sem tekur tillit til proxy-breyta og undanþágureglna. Ef þú vilt prófa eina tiltekna færslu á HTTP-listanum fjarlægir skýr veljari þessa óvissu.

Lokaðu svarinu og endurnýttu biðlarann

Dæmið les allan svarhlutann og lokar honum. Að lesa til enda hjálpar transportinum að endurnýta tengingu þegar hægt er. Í forriti sem sendir margar beiðnir um sama proxy skaltu halda biðlara og transporti í stað þess að smíða nýtt par fyrir hverja beiðni.

Tímamörk biðlarans ná yfir meira en að opna sökkulinn; þau takmarka líka lífsferil beiðninnar, þar á meðal lestur svarhlutans. Lestrarvillur þarf enn að meðhöndla eftir að Get skilar. Staða eins og 403 er ekki Go-transportvilla, svo skoðaðu StatusCode aðskilið frá err.

Tengdir greinar