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}

Dùng context, net/http và net/url; khẳng định kiểu mặc định giả định transport đó vẫn được cài đặt. proxyURL được phân tích và observeConnect phải an toàn với tính đồng thời. Với các phép thử HTTPS công khai được phép, Danh sách proxy HTTP cung cấp ứng viên cho URL proxy đó.

Callback chạy trước khi kiểm tra CONNECT có phải 200 thành công hay không, nên nó cũng có thể quan sát 407. Nil tiếp tục kiểm tra thông thường và không chấp nhận đường hầm bị từ chối; lỗi khiến yêu cầu thất bại.

X-Proxy-Region là ví dụ do nhà cung cấp định nghĩa. Đọc trạng thái và header ở đây và để quyền sở hữu body cùng socket cho Transport, đơn vị sau đó xử lý TLS đích.

Điều này quan sát việc thiết lập đường hầm mới, không phải mọi yêu cầu. Kết nối được tái sử dụng không có phản hồi CONNECT mới, và phản hồi của trang web có header riêng.

Bài viết liên quan