question: private void makeTunnel ( TunnelRequest tunnelRequest ) throws IOException { RawHeaders requestHeaders = tunnelRequest . getRequestHeaders ( ) ; while ( true ) { out . write ( requestHeaders . toBytes ( ) ) ; RawHeaders responseHeaders = RawHeaders . fromBytes ( in ) ; switch ( responseHeaders . getResponseCode ( ) ) { case HTTP_OK : return ; case HTTP_PROXY_AUTH : requestHeaders = new RawHeaders ( requestHeaders ) ; URL url = new URL ( "https" , tunnelRequest . host , tunnelRequest . port , "/" ) ; boolean credentialsFound = HttpAuthenticator . processAuthHeader ( route . address . authenticator , HTTP_PROXY_AUTH , responseHeaders , requestHeaders , route . proxy , url ) ; if ( credentialsFound ) { continue ; } else { throw new IOException ( "Failed to authenticate with proxy" ) ; } default : throw new IOException ( "Unexpected response code for CONNECT: " + responseHeaders . getResponseCode ( ) ) ; } } }
target:  To make an HTTPS connection over an HTTP proxy, send an unencrypted CONNECT request to create the proxy connection. This may need to be retried if the proxy requires authorization.