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 استفاده کنید؛ اظهار نوع پیش‌فرض فرض می‌کند که آن ترنسپورت نصب‌شده باقی می‌ماند. proxyURL تجزیه می‌شود و observeConnect باید از نظر هم‌زمانی ایمن باشد. برای کاوش‌های HTTPS عمومی مجاز، فهرست پروکسی HTTP نامزدهایی برای آن proxy URL فراهم می‌کند.

تابع بازگشتی پیش از بررسی CONNECT برای 200 موفق اجرا می‌شود، پس می‌تواند 407 را هم ببیند. nil بررسی عادی را ادامه می‌دهد و تونل ردشده را نمی‌پذیرد؛ خطا درخواست را شکست می‌دهد.

X-Proxy-Region نمونه‌ای است که ارائه‌دهنده تعریف می‌کند. وضعیت و سرصفحه‌ها را اینجا بخوانید و مالکیت بدنه و سوکت را به Transport بسپارید که سپس TLS مقصد را مدیریت می‌کند.

این برپایی تونل جدید را رصد می‌کند، نه هر درخواست را. اتصال بازاستفاده‌شده پاسخ CONNECT جدیدی ندارد و پاسخ وب‌سایت سرصفحه‌های جداگانه دارد.

مقالات مرتبط