WordPress.org

Make WordPress Core

Ticket #10624: 10624.2.diff

File 10624.2.diff, 2.7 KB (added by dd32, 4 years ago)
  • wp-includes/http.php

     
    739768                        return new WP_Error('http_request_failed', $arrHeaders['response']['code'] . ': ' . $arrHeaders['response']['message']); 
    740769 
    741770                // If location is found, then assume redirect and redirect to location. 
    742                 if ( isset($arrHeaders['headers']['location']) ) { 
     771                if ( 'HEAD' != $r['method'] && isset($arrHeaders['headers']['location']) ) { 
    743772                        if ( $r['redirection']-- > 0 ) { 
    744773                                return $this->request($arrHeaders['headers']['location'], $r); 
    745774                        } else { 
     
    884913                if ( ! function_exists('fopen') || (function_exists('ini_get') && true != ini_get('allow_url_fopen')) ) 
    885914                        return false; 
    886915 
     916                if ( isset($args['method']) && 'HEAD' == $args['method'] ) //This transport cannot make a HEAD request. 
     917                        return false; 
     918 
    887919                $use = true; 
    888920 
    889921                //PHP does not verify SSL certs, We can only make a request via this transports if SSL Verification is turned off. 
     
    9801012                                'protocol_version' => (float) $r['httpversion'], 
    9811013                                'header' => $strHeaders, 
    9821014                                'timeout' => $r['timeout'], 
     1015                                'ignore_errors' => true, // Return non-200 requests. 
    9831016                                'ssl' => array( 
    9841017                                                'verify_peer' => $ssl_verify, 
    9851018                                                'verify_host' => $ssl_verify 
     
    10011034                if ( ! is_null($r['body']) && ! empty($r['body'] ) ) 
    10021035                        $arrContext['http']['content'] = $r['body']; 
    10031036 
     1037                if ( 'HEAD' == $r['method'] ) // Disable redirects for HEAD requests 
     1038                        $arrContext['http']['max_redirects'] = 1; 
     1039 
    10041040                $context = stream_context_create($arrContext); 
    10051041 
    10061042                if ( !WP_DEBUG ) 
     
    10081044                else 
    10091045                        $handle = fopen($url, 'r', false, $context); 
    10101046 
    1011                 if ( ! $handle) 
     1047                if ( ! $handle ) 
    10121048                        return new WP_Error('http_request_failed', sprintf(__('Could not open handle for fopen() to %s'), $url)); 
    10131049 
    10141050                $timeout = (int) floor( $r['timeout'] ); 
     
    11591195                        ) 
    11601196                ); 
    11611197 
     1198                if ( HTTP_METH_HEAD == $r['method'] ) 
     1199                        $options['redirect'] = 0; // Assumption: Docs seem to suggest that this means do not follow. Untested. 
     1200 
    11621201                // The HTTP extensions offers really easy proxy support. 
    11631202                $proxy = new WP_HTTP_Proxy(); 
    11641203 
     
    13261365                else 
    13271366                        curl_setopt( $handle, CURLOPT_HEADER, false ); 
    13281367 
    1329                 // The option doesn't work with safe mode or when open_basedir is set. 
    1330                 if ( !ini_get('safe_mode') && !ini_get('open_basedir') ) 
     1368                // The option doesn't work with safe mode or when open_basedir is set. Do not follow for Redirects either. 
     1369                if ( !ini_get('safe_mode') && !ini_get('open_basedir') && 'HEAD' != $r['method'] ) 
    13311370                        curl_setopt( $handle, CURLOPT_FOLLOWLOCATION, true ); 
    13321371 
    13331372                if ( !empty( $r['headers'] ) ) {