WP_Http::handle_redirects()public staticWP 3.7.0

Handles an HTTP redirect and follows it if appropriate.

Метод класса: WP_Http{}

Хуков нет.

Возвращает

Массив|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.

Использование

$result = WP_Http::handle_redirects( $url, $args, $response );
$url(строка) (обязательный)
The URL which was requested.
$args(массив) (обязательный)
The arguments which were used to make the request.
$response(массив) (обязательный)
The response of the HTTP request.

Список изменений

С версии 3.7.0 Введена.

Код WP_Http::handle_redirects() WP 6.5.2

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;
			}
		}
	}

	return wp_remote_request( $redirect_location, $args );
}