WordPress.org

Make WordPress Core

Ticket #10624: 10624.2.diff

File 10624.2.diff, 2.7 KB (added by dd32, 8 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'] ) ) {