Cludiant cleient HTTP yn Go sy’n dewis y dirprwy. Cloniwch y cludiant safonol cyn ei newid er mwyn i ddefnyddwyr eraill y cleient diofyn gadw eu llwybrau presennol.

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

Cyfeiriad enghreifftiol ar gyfer dogfennaeth yw hwn. Newidiwch ef i IP a phorth dirprwy HTTP go iawn, megis ymgeisydd o’r rhestr dirprwyon HTTP. Dim ond llyfrgell safonol Go a ddefnyddir; nid oes angen pecyn SOCKS na newidyn amgylchedd ar gyfer y broses gyfan i wneud y cais dirprwy HTTP hwn.

Pam peidio â newid DefaultTransport yn uniongyrchol?

Mae’r cludiant diofyn yn cael ei rannu. Gall ei newid effeithio ar god na ofynnodd erioed am eich dirprwy, a gall ei newid tra bo ceisiadau’n ei ddefnyddio greu problemau cydamseru y gellir eu hosgoi. Mae cludiant penodol yn gwneud y llwybr yn rhan o ffurfweddiad y cleient hwn.

Mae http.ProxyURL yn dychwelyd dewiswr sy’n dewis yr URL a roddwyd bob tro. Mae hyn yn wahanol i’r dewiswr amgylchedd diofyn, sy’n ystyried newidynnau dirprwy a rheolau osgoi. Os ydych am brofi un cofnod penodol o’r rhestr HTTP, mae’r dewiswr penodol yn dileu’r ffynhonnell amwysedd hon.

Caewch yr ymateb ac ailddefnyddiwch y cleient

Mae’r enghraifft yn darllen corff yr ymateb i’r diwedd ac yn ei gau. Mae darllen yn llawn yn helpu’r cludiant i ailddefnyddio cysylltiad pan fo modd. Mewn rhaglen sy’n anfon sawl cais drwy’r un dirprwy, cadwch y cleient a’r cludiant yn hytrach na chreu pâr newydd ar gyfer pob cais.

Mae terfyn amser y cleient yn cwmpasu mwy nag agor y soced; mae hefyd yn cyfyngu ar gylch oes y cais, gan gynnwys darllen corff yr ymateb. Mae angen trin gwallau darllen o hyd ar ôl i Get ddychwelyd. Nid gwall cludiant Go yw statws fel 403, felly gwiriwch StatusCode ar wahân i err.

Erthyglau cysylltiedig