50 lines
981 B
PHP
50 lines
981 B
PHP
<?php
|
|
namespace Elementor\Core\Utils;
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly.
|
|
}
|
|
|
|
class Http extends \WP_Http {
|
|
/**
|
|
* Pass multiple urls to implements a fallback machine when one of the urls
|
|
* is sending an error or not exists anymore.
|
|
*
|
|
* @param array $urls
|
|
* @param array $args
|
|
*
|
|
* @return array|\WP_Error|null
|
|
*/
|
|
public function request_with_fallback( array $urls, $args = [] ) {
|
|
$response = null;
|
|
|
|
foreach ( $urls as $url ) {
|
|
$response = $this->request( $url, $args );
|
|
|
|
if ( $this->is_successful_response( $response ) ) {
|
|
return $response;
|
|
}
|
|
}
|
|
|
|
return $response;
|
|
}
|
|
|
|
/**
|
|
* @param $response
|
|
*
|
|
* @return bool
|
|
*/
|
|
private function is_successful_response( $response ) {
|
|
if ( is_wp_error( $response ) ) {
|
|
return false;
|
|
}
|
|
|
|
$response_code = (int) wp_remote_retrieve_response_code( $response );
|
|
|
|
if ( in_array( $response_code, [ 0, 404, 500 ], true ) ) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|