דער transport פֿונעם Go HTTP־קליענט קלײַבט דעם פּראָקסי. קלאָנט דעם סטאַנדאַרטן 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־פּראָקסי־IP און פּאָרט, למשל אַ קאַנדידאַט פֿון דער HTTP־פּראָקסי־רשימה. דאָס בײַשפּיל ניצט בלויז די סטאַנדאַרטביבליאָטעק פֿון Go; פֿאַר דעם HTTP־פּראָקסי־אָנפֿרעג דאַרף מען נישט קיין SOCKS־פּעקל אָדער סבֿיבֿה־וואַריאַבל פֿאַרן גאַנצן פּראָצעס.

פֿאַר וואָס נישט גלײַך ענדערן DefaultTransport?

דער סטאַנדאַרטער transport ווערט געטיילט. אים ענדערן קען ווירקן אויף קאָד וואָס האָט קיינמאָל נישט געבעטן צו ניצן אײַער פּראָקסי. ענדערונגען בשעת אָנפֿרעגן ניצן אים שאַפֿן אויך אויסמײַדלעכע פּראָבלעמען פֿון גלײַכצײַטיקער אַרבעט. אַ באַזונדערער transport מאַכט די רוטע אַ טייל פֿון דעם קליענטס קאָנפֿיגוראַציע.

http.ProxyURL גיט צוריק אַ סעלעקטאָר וואָס קלײַבט שטענדיק דעם געגעבענעם URL. דאָס איז אַנדערש ווי דער סטאַנדאַרטער סבֿיבֿה־סעלעקטאָר וואָס נעמט אין באַטראַכט פּראָקסי־וואַריאַבלען און אויסנאַם־כּללים. אויב איר ווילט פּרוּוון איין באַשטימטן אײַנטראָג אין דער HTTP־רשימה, נעמט דער בפֿירושער סעלעקטאָר אַוועק דעם מקור פֿון אומקלאָרקייט.

שליסט דעם ענטפֿער און ניצט דעם קליענט ווידער

דאָס בײַשפּיל לייענט דעם גאַנצן ענטפֿער־קערפּער און שליסט אים. ביזן סוף לייענען העלפֿט דעם transport ווידער צו ניצן אַ פֿאַרבינדונג ווען מעגלעך. אין אַ פּראָגראַם מיט עטלעכע אָנפֿרעגן דורך דעם זעלבן פּראָקסי האַלט דעם קליענט און transport, אַנשטאָט שאַפֿן אַ נײַ פּאָר פֿאַר יעדער אָנפֿרעג.

דער צײַט־לימיט פֿונעם קליענט דעקט נישט בלויז עפֿענען דעם סאָקעט; ער באַגרענעצט אויך דעם לעבנסציקל פֿונעם אָנפֿרעג, אַרײַנגערעכנט לייענען דעם ענטפֿער־קערפּער. לייענפֿעלערן דאַרף מען נאָך אַלץ באַהאַנדלען נאָכן צוריקקומען פֿון Get. אַ סטאַטוס ווי 403 איז נישט קיין Go transport־טעות, דעריבער קאָנטראָלירט StatusCode באַזונדער פֿון err.

פֿאַרבונדענע אַרטיקלען