WordPress.org

Make WordPress Core

Ticket #8702: 8702.6.diff

File 8702.6.diff, 6.3 KB (added by sivel, 5 years ago)
  • wp-includes/http.php

     
    237237                        } else if ( true === WP_Http_Streams::test() && apply_filters('use_streams_transport', true) ) { 
    238238                                $working_transport['streams'] = new WP_Http_Streams(); 
    239239                                $blocking_transport[] = &$working_transport['streams']; 
    240                         } else if ( true === WP_Http_Fopen::test() && apply_filters('use_fopen_transport', true) ) { 
     240                        } else if ( true === WP_Http_Fopen::test() && apply_filters('use_fopen_transport', true) && ( isset($args['ssl']) && !$args['ssl'] ) ) { 
    241241                                $working_transport['fopen'] = new WP_Http_Fopen(); 
    242242                                $blocking_transport[] = &$working_transport['fopen']; 
    243                         } else if ( true === WP_Http_Fsockopen::test() && apply_filters('use_fsockopen_transport', true) ) { 
     243                        } else if ( true === WP_Http_Fsockopen::test() && apply_filters('use_fsockopen_transport', true) && ( isset($args['ssl']) && !$args['ssl'] ) ) { 
    244244                                $working_transport['fsockopen'] = new WP_Http_Fsockopen(); 
    245245                                $blocking_transport[] = &$working_transport['fsockopen']; 
    246246                        } 
     
    282282                        if ( true === WP_Http_ExtHttp::test() && apply_filters('use_http_extension_transport', true) ) { 
    283283                                $working_transport['exthttp'] = new WP_Http_ExtHttp(); 
    284284                                $blocking_transport[] = &$working_transport['exthttp']; 
     285                        } else if ( true === WP_Http_Curl::test() && apply_filters('use_curl_transport', true) ) { 
     286                                $working_transport['curl'] = new WP_Http_Curl(); 
     287                                $blocking_transport[] = &$working_transport['curl']; 
    285288                        } else if ( true === WP_Http_Streams::test() && apply_filters('use_streams_transport', true) ) { 
    286289                                $working_transport['streams'] = new WP_Http_Streams(); 
    287290                                $blocking_transport[] = &$working_transport['streams']; 
    288                         } else if ( true === WP_Http_Fsockopen::test() && apply_filters('use_fsockopen_transport', true) ) { 
     291                        } else if ( true === WP_Http_Fsockopen::test() && apply_filters('use_fsockopen_transport', true) && ( isset($args['ssl']) && !$args['ssl'] ) ) { 
    289292                                $working_transport['fsockopen'] = new WP_Http_Fsockopen(); 
    290293                                $blocking_transport[] = &$working_transport['fsockopen']; 
    291294                        } 
    292295 
    293                         foreach ( array('streams', 'fsockopen', 'exthttp') as $transport ) { 
     296                        foreach ( array('curl', 'streams', 'fsockopen', 'exthttp') as $transport ) { 
    294297                                if ( isset($working_transport[$transport]) ) 
    295298                                        $nonblocking_transport[] = &$working_transport[$transport]; 
    296299                        } 
     
    358361                        'timeout' => apply_filters( 'http_request_timeout', 5), 
    359362                        'redirection' => apply_filters( 'http_request_redirection_count', 5), 
    360363                        'httpversion' => apply_filters( 'http_request_version', '1.0'), 
    361                         'user-agent' => apply_filters( 'http_headers_useragent', 'WordPress/' . $wp_version ), 
     364                        'user-agent' => apply_filters( 'http_headers_useragent', 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' )  ), 
    362365                        'blocking' => true, 
    363366                        'headers' => array(), 
    364367                        'body' => null, 
    365368                        'compress' => false, 
    366                         'decompress' => true 
     369                        'decompress' => true, 
     370                        'sslverify' => true 
    367371                ); 
    368372 
    369373                $r = wp_parse_args( $args, $defaults ); 
    370374                $r = apply_filters( 'http_request_args', $r, $url ); 
    371375 
     376                $arrURL = parse_url($url); 
     377 
     378                // Determine if this is a https call and pass that on to the transport functions 
     379                // so that we can blacklist the transports that do not support ssl verification 
     380                if ( $arrURL['scheme'] == 'https' || $arrURL['scheme'] == 'ssl' ) 
     381                        $r['ssl'] = true; 
     382                else 
     383                        $r['ssl'] = false; 
     384 
    372385                if ( is_null( $r['headers'] ) ) 
    373386                        $r['headers'] = array(); 
    374387 
     
    927940                                'max_redirects' => $r['redirection'], 
    928941                                'protocol_version' => (float) $r['httpversion'], 
    929942                                'header' => $strHeaders, 
    930                                 'timeout' => $r['timeout'] 
     943                                'timeout' => $r['timeout'], 
     944                                'ssl' => array( 
     945                                        'verify_peer' => apply_filters('https_ssl_verify', $r['sslverify']), 
     946                                        'verify_host' => apply_filters('https_ssl_verify', $r['sslverify']) 
     947                                ) 
    931948                        ) 
    932949                ); 
    933950 
     
    10601077                        'redirect' => $r['redirection'], 
    10611078                        'useragent' => $r['user-agent'], 
    10621079                        'headers' => $r['headers'], 
     1080                        'ssl' => array(  
     1081                                'verifypeer' => apply_filters('https_ssl_verify', $r['sslverify']), 
     1082                                'verifyhost' => apply_filters('https_ssl_verify', $r['sslverify']) 
     1083                        ) 
    10631084                ); 
    10641085 
    10651086                if ( !defined('WP_DEBUG') || ( defined('WP_DEBUG') && false === WP_DEBUG ) ) //Emits warning level notices for max redirects and timeouts 
     
    11531174                        $r['timeout'] = 1; 
    11541175 
    11551176                $handle = curl_init(); 
     1177 
    11561178                curl_setopt( $handle, CURLOPT_URL, $url); 
     1179                curl_setopt( $handle, CURLOPT_RETURNTRANSFER, true ); 
     1180                curl_setopt( $handle, CURLOPT_SSL_VERIFYHOST, apply_filters('https_ssl_verify', $r['sslverify']) ); 
     1181                curl_setopt( $handle, CURLOPT_SSL_VERIFYPEER, apply_filters('https_ssl_verify', $r['sslverify']) ); 
     1182                curl_setopt( $handle, CURLOPT_USERAGENT, $r['user-agent'] ); 
     1183                curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, $r['timeout'] ); 
     1184                curl_setopt( $handle, CURLOPT_TIMEOUT, $r['timeout'] ); 
     1185                curl_setopt( $handle, CURLOPT_MAXREDIRS, $r['redirection'] ); 
    11571186 
    1158                 // The cURL extension requires that the option be set for the HEAD to 
    1159                 // work properly. 
    1160                 if ( 'HEAD' === $r['method'] ) { 
    1161                         curl_setopt( $handle, CURLOPT_NOBODY, true ); 
     1187                switch ( $r['method'] ) { 
     1188                        case 'HEAD': 
     1189                                curl_setopt( $handle, CURLOPT_NOBODY, true ); 
     1190                                break; 
     1191                        case 'POST': 
     1192                                curl_setopt( $handle, CURLOPT_POST, true ); 
     1193                                curl_setopt( $handle, CURLOPT_POSTFIELDS, $r['body'] ); 
     1194                                break; 
    11621195                } 
    11631196 
    1164                 if ( true === $r['blocking'] ) { 
     1197                if ( true === $r['blocking'] ) 
    11651198                        curl_setopt( $handle, CURLOPT_HEADER, true ); 
    1166                         curl_setopt( $handle, CURLOPT_RETURNTRANSFER, 1 ); 
    1167                 } else { 
     1199                else 
    11681200                        curl_setopt( $handle, CURLOPT_HEADER, false ); 
    1169                         curl_setopt( $handle, CURLOPT_NOBODY, true ); 
    1170                         curl_setopt( $handle, CURLOPT_RETURNTRANSFER, 0 ); 
    1171                 } 
    11721201 
    1173                 curl_setopt( $handle, CURLOPT_USERAGENT, $r['user-agent'] ); 
    1174                 curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, 1 ); 
    1175                 curl_setopt( $handle, CURLOPT_TIMEOUT, $r['timeout'] ); 
    1176                 curl_setopt( $handle, CURLOPT_MAXREDIRS, $r['redirection'] ); 
    1177  
    11781202                // The option doesn't work with safe mode or when open_basedir is set. 
    11791203                if ( !ini_get('safe_mode') && !ini_get('open_basedir') ) 
    11801204                        curl_setopt( $handle, CURLOPT_FOLLOWLOCATION, true );