thirdparty/Zend/Http/Client/Adapter/Proxy.php
protected function connectHandshake($host, $port = 443, $http_ver = '1.1', array &$headers = array())
    {
        $request = "CONNECT $host:$port HTTP/$http_ver\r\n" . 
                   "Host: " . $this->config['proxy_host'] . "\r\n";

        // Add the user-agent header
        if (isset($this->config['useragent'])) {
            $request .= "User-agent: " . $this->config['useragent'] . "\r\n";
        }
        
        // If the proxy-authorization header is set, send it to proxy but remove
        // it from headers sent to target host
        if (isset($headers['proxy-authorization'])) {
            $request .= "Proxy-authorization: " . $headers['proxy-authorization'] . "\r\n";
            unset($headers['proxy-authorization']);
        }
    
        $request .= "\r\n";

        // Send the request
        if (! @fwrite($this->socket, $request)) {
            require_once 'Zend/Http/Client/Adapter/Exception.php';
            throw new Zend_Http_Client_Adapter_Exception("Error writing request to proxy server");
        }

        // Read response headers only
        $response = '';
        $gotStatus = false;
        while ($line = @fgets($this->socket)) {
            $gotStatus = $gotStatus || (strpos($line, 'HTTP') !== false);
            if ($gotStatus) {
                $response .= $line;
                if (!chop($line)) break;
            }
        }
        
        // Check that the response from the proxy is 200
        if (Zend_Http_Response::extractCode($response) != 200) {
            require_once 'Zend/Http/Client/Adapter/Exception.php';
            throw new Zend_Http_Client_Adapter_Exception("Unable to connect to HTTPS proxy. Server response: " . $response);
        }
        
        // If all is good, switch socket to secure mode. We have to fall back
        // through the different modes 
        $modes = array(
            STREAM_CRYPTO_METHOD_TLS_CLIENT, 
            STREAM_CRYPTO_METHOD_SSLv3_CLIENT,
            STREAM_CRYPTO_METHOD_SSLv23_CLIENT,
            STREAM_CRYPTO_METHOD_SSLv2_CLIENT 
        );
        
        $success = false; 
        foreach($modes as $mode) {
            $success = stream_socket_enable_crypto($this->socket, true, $mode);
            if ($success) break;
        }
        
        if (! $success) {
                require_once 'Zend/Http/Client/Adapter/Exception.php';
                throw new Zend_Http_Client_Adapter_Exception("Unable to connect to" . 
                    " HTTPS server through proxy: could not negotiate secure connection.");
        }
    }
protected function connectHandshake($host, $port = 443, $http_ver = '1.1', array &$headers = array())
    {
        $request = "CONNECT $host:$port HTTP/$http_ver\r\n" . 
                   "Host: " . $this->config['proxy_host'] . "\r\n";

        // Add the user-agent header
        if (isset($this->config['useragent'])) {
            $request .= "User-agent: " . $this->config['useragent'] . "\r\n";
        }
        
        // If the proxy-authorization header is set, send it to proxy but remove
        // it from headers sent to target host
        if (isset($headers['proxy-authorization'])) {
            $request .= "Proxy-authorization: " . $headers['proxy-authorization'] . "\r\n";
            unset($headers['proxy-authorization']);
        }
    
        $request .= "\r\n";

        // Send the request
        if (! @fwrite($this->socket, $request)) {
            require_once 'Zend/Http/Client/Adapter/Exception.php';
            throw new Zend_Http_Client_Adapter_Exception("Error writing request to proxy server");
        }

        // Read response headers only
        $response = '';
        $gotStatus = false;
        while ($line = @fgets($this->socket)) {
            $gotStatus = $gotStatus || (strpos($line, 'HTTP') !== false);
            if ($gotStatus) {
                $response .= $line;
                if (!chop($line)) break;
            }
        }
        
        // Check that the response from the proxy is 200
        if (Zend_Http_Response::extractCode($response) != 200) {
            require_once 'Zend/Http/Client/Adapter/Exception.php';
            throw new Zend_Http_Client_Adapter_Exception("Unable to connect to HTTPS proxy. Server response: " . $response);
        }
        
        // If all is good, switch socket to secure mode. We have to fall back
        // through the different modes 
        $modes = array(
            STREAM_CRYPTO_METHOD_TLS_CLIENT, 
            STREAM_CRYPTO_METHOD_SSLv3_CLIENT,
            STREAM_CRYPTO_METHOD_SSLv23_CLIENT,
            STREAM_CRYPTO_METHOD_SSLv2_CLIENT 
        );
        
        $success = false; 
        foreach($modes as $mode) {
            $success = stream_socket_enable_crypto($this->socket, true, $mode);
            if ($success) break;
        }
        
        if (! $success) {
                require_once 'Zend/Http/Client/Adapter/Exception.php';
                throw new Zend_Http_Client_Adapter_Exception("Unable to connect to" . 
                    " HTTPS server through proxy: could not negotiate secure connection.");
        }
    }
protected function connectHandshake ( $ host , $ port = 443 , $ http_ver = '1.1' , array & $ headers = array ( ) ) { $ request = "CONNECT $host:$port HTTP/$http_ver\r\n" . "Host: " . $ this -> config [ 'proxy_host' ] . "\r\n" ; // Add the user-agent header if ( isset ( $ this -> config [ 'useragent' ] ) ) { $ request .= "User-agent: " . $ this -> config [ 'useragent' ] . "\r\n" ; } // If the proxy-authorization header is set, send it to proxy but remove // it from headers sent to target host if ( isset ( $ headers [ 'proxy-authorization' ] ) ) { $ request .= "Proxy-authorization: " . $ headers [ 'proxy-authorization' ] . "\r\n" ; unset ( $ headers [ 'proxy-authorization' ] ) ; } $ request .= "\r\n" ; // Send the request if ( ! @ fwrite ( $ this -> socket , $ request ) ) { require_once 'Zend/Http/Client/Adapter/Exception.php' ; throw new Zend_Http_Client_Adapter_Exception ( "Error writing request to proxy server" ) ; } // Read response headers only $ response = '' ; $ gotStatus = false ; while ( $ line = @ fgets ( $ this -> socket ) ) { $ gotStatus = $ gotStatus || ( strpos ( $ line , 'HTTP' ) !== false ) ; if ( $ gotStatus ) { $ response .= $ line ; if ( ! chop ( $ line ) ) break ; } } // Check that the response from the proxy is 200 if ( Zend_Http_Response :: extractCode ( $ response ) != 200 ) { require_once 'Zend/Http/Client/Adapter/Exception.php' ; throw new Zend_Http_Client_Adapter_Exception ( "Unable to connect to HTTPS proxy. Server response: " . $ response ) ; } // If all is good, switch socket to secure mode. We have to fall back // through the different modes  $ modes = array ( STREAM_CRYPTO_METHOD_TLS_CLIENT , STREAM_CRYPTO_METHOD_SSLv3_CLIENT , STREAM_CRYPTO_METHOD_SSLv23_CLIENT , STREAM_CRYPTO_METHOD_SSLv2_CLIENT ) ; $ success = false ; foreach ( $ modes as $ mode ) { $ success = stream_socket_enable_crypto ( $ this -> socket , true , $ mode ) ; if ( $ success ) break ; } if ( ! $ success ) { require_once 'Zend/Http/Client/Adapter/Exception.php' ; throw new Zend_Http_Client_Adapter_Exception ( "Unable to connect to" . " HTTPS server through proxy: could not negotiate secure connection." ) ; } }
Preform handshaking with HTTPS proxy using CONNECT method

@param string  $host
@param integer $port
@param string  $http_ver
@param array   $headers
Preform handshaking with HTTPS proxy using CONNECT method