የGo HTTP ደንበኛ transport ፕሮክሲውን ይመርጣል። ሌሎች የነባሪው ደንበኛ ተጠቃሚዎች የነበራቸውን መንገድ እንዲጠብቁ፣ መደበኛውን transport ከመቀየር በፊት ቅዳት ያድርጉ።

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

አድራሻው የሰነድ ምሳሌ ነው። ከHTTP ፕሮክሲ ዝርዝር እንደሚመረጥ እጩ፣ በእውነተኛ HTTP ፕሮክሲ IP እና ፖርት ይተኩት። ምሳሌው የGo መደበኛ ቤተ መጻሕፍትን ብቻ ይጠቀማል፤ ለዚህ HTTP ፕሮክሲ ጥያቄ SOCKS ጥቅል ወይም መላውን ሂደት የሚነካ የአካባቢ ተለዋዋጭ አያስፈልግም።

DefaultTransportን በቀጥታ ለምን አንቀይረውም?

ነባሪው transport በጋራ ይጠቀሙበታል። እሱን መቀየር ፕሮክሲዎን እንዲጠቀም ያልተጠየቀ ኮድን ሊነካ ይችላል፤ ጥያቄዎች እየተጠቀሙበት እያሉ መቀየርም ሊቀሩ የሚችሉ የአንድ ጊዜ አፈጻጸም ችግሮችን ይፈጥራል። የተለየ transport መንገዱን የዚህ ደንበኛ ቅንብር አካል ያደርገዋል።

http.ProxyURL ሁልጊዜ የተሰጠውን URL የሚመርጥ መራጭ ይመልሳል። ይህ የፕሮክሲ ተለዋዋጮችንና የማለፊያ ደንቦችን ከሚመለከተው ነባሪ የአካባቢ መራጭ ይለያል። ከHTTP ዝርዝር አንድ የተወሰነ መዝገብ መፈተሽ ከፈለጉ፣ ግልጽ መራጩ ይህን የአሻሚነት ምንጭ ያስወግዳል።

ምላሹን ይዝጉና ደንበኛውን እንደገና ይጠቀሙ

ምሳሌው የምላሹን አካል እስከ መጨረሻ አንብቦ ይዘጋዋል። ሙሉ በሙሉ ማንበብ transport ከቻለ ግንኙነቱን እንደገና እንዲጠቀም ይረዳዋል። በአንድ ፕሮክሲ ብዙ ጥያቄዎችን በሚልክ ፕሮግራም፣ ለእያንዳንዱ ጥያቄ አዲስ ጥንድ ከመፍጠር ይልቅ ደንበኛውንና transportን ያቆዩ።

የደንበኛው የጊዜ ገደብ ሶኬት መክፈትን ብቻ አይሸፍንም፤ የምላሹን አካል ማንበብን ጨምሮ የጥያቄውን ሕይወት ይገድባል። Get ከተመለሰ በኋላም የንባብ ስህተቶችን ማስተናገድ ያስፈልጋል። እንደ 403 ያለ ሁኔታ የGo transport ስህተት አይደለም፤ ስለዚህ StatusCodeን ከerr ለይተው ይመልከቱ።

ተዛማጅ ጽሑፎች