OnProxyConnectResponse இல் Go இன் CONNECT நிலையைக் கவனிக்கவும்
கோரிக்கைகளுக்கு முன் transport இல் hook ஐ நிறுவவும்; nil திருப்பித் தருவது அதன் வழக்கமான tunnel-நிலை சரிபார்ப்பைப் பாதுகாக்கிறது.
transport := http.DefaultTransport.(*http.Transport).Clone()
transport.Proxy = http.ProxyURL(proxyURL)
transport.OnProxyConnectResponse = func(
_ context.Context,
_ *url.URL,
_ *http.Request,
response *http.Response,
) error {
observeConnect(response.StatusCode, response.Header.Get("X-Proxy-Region"))
return nil
}
client := &http.Client{Transport: transport}context, net/http மற்றும் net/url பயன்படுத்தவும்; நிலையான-இயல்புநிலை வகை உறுதிமொழி அந்த transport நிறுவப்பட்டதாகவே இருக்கும் எனக் கருதுகிறது. proxyURL பாகுபடுத்தப்படுகிறது, observeConnect ஒருங்கிணைப்புக்கு பாதுகாப்பாக இருக்க வேண்டும். அனுமதிக்கப்பட்ட பொது HTTPS சோதனைகளுக்கு HTTP proxy பட்டியல் அந்த proxy URL க்கு வேட்பாளர்களை வழங்குகிறது.
கால்பேக் CONNECT வெற்றிகரமான 200 ஆக உள்ளதா எனச் சரிபார்ப்பதற்கு முன் இயங்குகிறது, எனவே 407 ஐயும் கவனிக்க முடியும். nil வழக்கமான சரிபார்ப்பைத் தொடர்கிறது, நிராகரிக்கப்பட்ட tunnel ஐ ஏற்காது; பிழை கோரிக்கையைத் தோல்வியடையச் செய்கிறது.
X-Proxy-Region வழங்குநரால் வரையறுக்கப்பட்ட உதாரணம். இங்கே நிலை மற்றும் headers ஐப் படித்து, body மற்றும் socket இன் உரிமையை Transport இடம் விடவும்; அது பின்னர் இலக்கு TLS ஐக் கையாளும்.
இது புதிய tunnel அமைப்பைக் கவனிக்கிறது, ஒவ்வொரு கோரிக்கையையும் அல்ல. மீண்டும் பயன்படுத்தப்பட்ட இணைப்பில் புதிய CONNECT பதில் இல்லை, வலைத்தளத்தின் பதிலுக்கு தனி headers உள்ளன.