HTTP/2 Go ਦੀ SOCKS ਸੁਰੰਗ ਵਿੱਚ ਫਿੱਟ ਹੁੰਦਾ ਹੈ
ਮਿਆਰੀ HTTP ਟਰਾਂਸਪੋਰਟ ਨੂੰ ਕਲੋਨ ਕਰੋ, SOCKS ਪ੍ਰੌਕਸੀ ਚੁਣੋ ਅਤੇ ਅਸਲ ਵਿੱਚ ਗੱਲਬਾਤ ਕੀਤਾ ਗਿਆ ਮੰਜ਼ਿਲ ਪ੍ਰੋਟੋਕੋਲ ਜਾਂਚੋ।
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 ਦੀ ਗੱਲਬਾਤ ਅਜੇ ਵੀ ਮੰਜ਼ਿਲ ਨਾਲ ਹੁੰਦੀ ਹੈ। ਅਸਲ HTTPS ਸੇਵਾ URL ਦੀ ਬੇਨਤੀ ਕਰਨ ਲਈ client ਵਰਤੋ, ਫਿਰ ਐਪਲੀਕੇਸ਼ਨ ਦੇ ਆਮ ਜੀਵਨ-ਚੱਕਰ ਰਾਹੀਂ ਜਵਾਬ ਦਾ ਬਾਡੀ ਬੰਦ ਕਰੋ।
ਮਿਆਰੀ ਡਿਫਾਲਟ ਟਰਾਂਸਪੋਰਟ HTTP/2 ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ। ਇਸਨੂੰ ਕਲੋਨ ਕਰਨ ਨਾਲ ਉਹ ਕਨਫਿਗਰੇਸ਼ਨ ਬਣੀ ਰਹਿੰਦੀ ਹੈ ਅਤੇ ਪ੍ਰੌਕਸੀ ਦੀ ਚੋਣ ਬਦਲੀ ਜਾ ਸਕਦੀ ਹੈ। ਕਿਸਮ ਦੀ ਜਾਂਚ ਮੰਨਦੀ ਹੈ ਕਿ ਪ੍ਰੋਗਰਾਮ ਨੇ http.DefaultTransport ਨੂੰ ਕਿਸੇ ਹੋਰ RoundTripper ਨਾਲ ਨਹੀਂ ਬਦਲਿਆ।
ਵੱਖਰੇ ਤੌਰ 'ਤੇ ਬਣਾਏ ਟਰਾਂਸਪੋਰਟ ਲਈ, ਇਸ ਦੀ HTTP/2 ਕਨਫਿਗਰੇਸ਼ਨ ਦੀ ਸਮੀਖਿਆ ਕਰੋ, ਖਾਸ ਕਰਕੇ ਕਸਟਮ dial ਜਾਂ TLS ਹੁੱਕ ਦੇਣ ਸਮੇਂ। Go ForceAttemptHTTP2 ਅਤੇ ਨਵੇਂ ਰੀਲੀਜ਼ਾਂ ਵਿੱਚ ਉਹਨਾਂ ਚੋਣਾਂ ਲਈ ਸਪਸ਼ਟ Protocols ਕਨਫਿਗਰੇਸ਼ਨ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ।
ਮੰਜ਼ਿਲ ਨੂੰ ਅਜੇ ਵੀ TLS ਗੱਲਬਾਤ ਰਾਹੀਂ HTTP/2 ਪੇਸ਼ ਕਰਨਾ ਪਵੇਗਾ। ਇਹ ਦੇਖਣ ਲਈ ਕਿ ਕੀ ਵਰਤਿਆ ਗਿਆ, ਸਫਲ ਜਵਾਬ ਦਾ Proto ਜਾਂ ProtoMajor ਮੁੱਲ ਜਾਂਚੋ। SOCKS ਰਾਹੀਂ ਸਫਲ HTTPS ਬੇਨਤੀ ਆਪਣੇ ਆਪ ਇਹ ਸਾਬਤ ਨਹੀਂ ਕਰਦੀ ਕਿ ਗੱਲਬਾਤ ਵਾਲਾ ਪ੍ਰੋਟੋਕੋਲ HTTP/2 ਸੀ।