Summery Summery
Handles an HTTP redirect and follows it if appropriate.
Syntax Syntax
Parameters Parameters
- $url
- 
					(Required) The URL which was requested. 
- $args
- 
					(Required) The arguments which were used to make the request. 
- $response
- 
					(Required) The response of the HTTP request. 
Return Return
(array|false|WP_Error) An HTTP API response array if the redirect is successfully followed, false if no redirect is present, or a WP_Error object if there's an error.
Source Source
File: wp-includes/class-http.php
	 * @param array  $args     The arguments which were used to make the request.
	 * @param array  $response The response of the HTTP request.
	 * @return array|false|WP_Error An HTTP API response array if the redirect is successfully followed,
	 *                              false if no redirect is present, or a WP_Error object if there's an error.
	 */
	public static function handle_redirects( $url, $args, $response ) {
		// If no redirects are present, or, redirects were not requested, perform no action.
		if ( ! isset( $response['headers']['location'] ) || 0 === $args['_redirection'] ) {
			return false;
		}
		// Only perform redirections on redirection http codes.
		if ( $response['response']['code'] > 399 || $response['response']['code'] < 300 ) {
			return false;
		}
		// Don't redirect if we've run out of redirects.
		if ( $args['redirection']-- <= 0 ) {
			return new WP_Error( 'http_request_failed', __( 'Too many redirects.' ) );
		}
		$redirect_location = $response['headers']['location'];
		// If there were multiple Location headers, use the last header specified.
		if ( is_array( $redirect_location ) ) {
			$redirect_location = array_pop( $redirect_location );
		}
		$redirect_location = WP_Http::make_absolute_url( $redirect_location, $url );
		// POST requests should not POST to a redirected location.
		if ( 'POST' === $args['method'] ) {
			if ( in_array( $response['response']['code'], array( 302, 303 ), true ) ) {
				$args['method'] = 'GET';
			}
		}
		// Include valid cookies in the redirect process.
		if ( ! empty( $response['cookies'] ) ) {
			foreach ( $response['cookies'] as $cookie ) {
				if ( $cookie->test( $redirect_location ) ) {
					$args['cookies'][] = $cookie;
				}
			Advertisement
Changelog Changelog
| Version | Description | 
|---|---|
| 3.7.0 | Introduced. | 
