OnProxyConnectResponse에서 Go의 CONNECT 상태 관찰하기
요청 전에 트랜스포트에 훅을 설치하세요. nil을 반환하면 정상적인 터널 상태 확인이 유지됩니다.
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 프록시 목록가 해당 프록시 URL의 후보를 제공합니다.
콜백은 CONNECT가 성공적인 200인지 확인하기 전에 실행되므로 407도 관찰할 수 있습니다. nil은 정상 확인을 계속하고 거부된 터널을 수용하지 않습니다. 오류가 발생하면 요청이 실패합니다.
X-Proxy-Region은 공급자가 정의한 예시입니다. 여기서 상태와 헤더를 읽고 본문과 소켓의 소유권은 Transport에 남겨 두세요. 그러면 Transport가 이후 대상 TLS를 처리합니다.
이것은 모든 요청이 아니라 새 터널 설정을 관찰합니다. 재사용된 연결에는 새로운 CONNECT 응답이 없고, 웹사이트 응답에는 별도의 헤더가 있습니다.