אַ SOCKS טונעל פֿירט אַ TCP פֿאַרבינדונג. Go קען מאַכן TLS מיטן ציל דורך דעם טונעל און פֿאַרהאַנדלען HTTP/2 דאָרט; דער SOCKS סערווער דאַרף נישט אַליין רעדן HTTP/2.

אין אַ פּראָגראַם וואָס האַלט דעם סטאַנדאַרד פֿאַרהאַנדל פֿון Go, קלאָנירט זײַן קאָנפֿיגוראַציע און קלײַבט אויס דעם פּראָקסי:

import (
    "net/http"
    "net/url"
    "time"
)

proxyURL := &url.URL{
    Scheme: "socks5",
    Host: "proxy.example:1080",
}
transport := http.DefaultTransport.(*http.Transport).Clone()
transport.Proxy = http.ProxyURL(proxyURL)
client := &http.Client{
    Transport: transport,
    Timeout: 30 * time.Second,
}

דער פּראָקסי און דער ציל בלײַבן אַנדערע ווערטן. קלײַבט אויס אַ SOCKS5 ענדפּונקט פֿון דער SOCKS5 פּראָקסי ליסטע פֿאַר דעם פּראָקסי ווערט; HTTP/2 ווערט נאָך פֿאַרהאַנדלט מיטן ציל. ניצט client צו פֿאָדערן דעם עכטער HTTPS סערוויס URL, דערנאָך פֿאַרמאַכט דעם ענטפֿער קערפּער דורך דעם נאָרמאַלן לעבנסציקלוס פֿון דער אַפּליקאַציע.

דער סטאַנדאַרד פֿאַרהאַנדל שטיצט HTTP/2. קלאָנירן אים האַלט די קאָנפֿיגוראַציע בשעת עס ערלויבט צו ענדערן די פּראָקסי אויסוואַל. די טיפּ פּרופֿונג שטעלט פֿאָר אַז די פּראָגראַם האָט נישט פֿאַרבטלאָזט http.DefaultTransport מיט אַן אַנדער RoundTripper.

פֿאַר אַ באַזונדער געבויטער פֿאַרהאַנדל, איבערקוקט זײַן HTTP/2 קאָנפֿיגוראַציע, ספּעציעל ווען איר שטעלט צו פּאַסטאַמאַדע dial אָדער TLS האָקן. Go אַנטדעקט ForceAttemptHTTP2 און, אין נייערע ווערסיעס, אַ קלאָרע Protocols קאָנפֿיגוראַציע פֿאַר די אויסוואַלן.

דער ציל מוז נאָך אַלץ פֿאָרשלאָגן HTTP/2 דורך TLS פֿאַרהאַנדלונג. פּרופֿט דעם Proto אָדער ProtoMajor ווערט פֿון דעם דערפֿאָלגרייכן ענטפֿער צו זען וואָס איז גענוצט געוואָרן. אַ דערפֿאָלגרייכע HTTPS פֿאָדערונג דורך SOCKS באַווײַזט נישט פֿון זיך אַליין אַז דער פֿאַרהאַנדלטער פּראָטאָקאָל איז געווען HTTP/2.

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