Rhowch ddirprwy penodol i gleient HTTP yn Go
Cloniwch gludiant diofyn Go, gosodwch ProxyURL ar gyfer yr IP dirprwy a ddewiswyd, a pheidiwch â newid ymddygiad cleientiaid eraill.
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.