157 lines
3.1 KiB
PHP
157 lines
3.1 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* WPSEO plugin file.
|
||
|
*
|
||
|
* @package WPSEO\Admin
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* This class handles a post request being send to a given endpoint.
|
||
|
*/
|
||
|
class WPSEO_Remote_Request {
|
||
|
|
||
|
/**
|
||
|
* Holds the post method.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
const METHOD_POST = 'post';
|
||
|
|
||
|
/**
|
||
|
* Holds the get method.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
const METHOD_GET = 'get';
|
||
|
|
||
|
/**
|
||
|
* Holds the endpoint to send the request to.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $endpoint = '';
|
||
|
|
||
|
/**
|
||
|
* Holds the arguments to use in this request.
|
||
|
*
|
||
|
* @var array
|
||
|
*/
|
||
|
protected $args = [
|
||
|
'blocking' => false,
|
||
|
'timeout' => 2,
|
||
|
];
|
||
|
|
||
|
/**
|
||
|
* Holds the response error.
|
||
|
*
|
||
|
* @var WP_Error|null
|
||
|
*/
|
||
|
protected $response_error;
|
||
|
|
||
|
/**
|
||
|
* Holds the response body.
|
||
|
*
|
||
|
* @var mixed
|
||
|
*/
|
||
|
protected $response_body;
|
||
|
|
||
|
/**
|
||
|
* Sets the endpoint and arguments.
|
||
|
*
|
||
|
* @param string $endpoint The endpoint to send the request to.
|
||
|
* @param array $args The arguments to use in this request.
|
||
|
*/
|
||
|
public function __construct( $endpoint, array $args = [] ) {
|
||
|
$this->endpoint = $endpoint;
|
||
|
$this->args = wp_parse_args( $this->args, $args );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Sets the request body.
|
||
|
*
|
||
|
* @param mixed $body The body to set.
|
||
|
*/
|
||
|
public function set_body( $body ) {
|
||
|
$this->args['body'] = $body;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Sends the data to the given endpoint.
|
||
|
*
|
||
|
* @param string $method The type of request to send.
|
||
|
*
|
||
|
* @return bool True when sending data has been successful.
|
||
|
*/
|
||
|
public function send( $method = self::METHOD_POST ) {
|
||
|
switch ( $method ) {
|
||
|
case self::METHOD_POST:
|
||
|
$response = $this->post();
|
||
|
break;
|
||
|
case self::METHOD_GET:
|
||
|
$response = $this->get();
|
||
|
break;
|
||
|
default:
|
||
|
/* translators: %1$s expands to the request method */
|
||
|
$response = new WP_Error( 1, sprintf( __( 'Request method %1$s is not valid.', 'wordpress-seo' ), $method ) );
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return $this->process_response( $response );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the value of the response error.
|
||
|
*
|
||
|
* @return WP_Error|null The response error.
|
||
|
*/
|
||
|
public function get_response_error() {
|
||
|
return $this->response_error;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the response body.
|
||
|
*
|
||
|
* @return mixed The response body.
|
||
|
*/
|
||
|
public function get_response_body() {
|
||
|
return $this->response_body;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Processes the given response.
|
||
|
*
|
||
|
* @param mixed $response The response to process.
|
||
|
*
|
||
|
* @return bool True when response is valid.
|
||
|
*/
|
||
|
protected function process_response( $response ) {
|
||
|
if ( $response instanceof WP_Error ) {
|
||
|
$this->response_error = $response;
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$this->response_body = wp_remote_retrieve_body( $response );
|
||
|
|
||
|
return ( wp_remote_retrieve_response_code( $response ) === 200 );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Performs a post request to the specified endpoint with set arguments.
|
||
|
*
|
||
|
* @return WP_Error|array The response or WP_Error on failure.
|
||
|
*/
|
||
|
protected function post() {
|
||
|
return wp_remote_post( $this->endpoint, $this->args );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Performs a post request to the specified endpoint with set arguments.
|
||
|
*
|
||
|
* @return WP_Error|array The response or WP_Error on failure.
|
||
|
*/
|
||
|
protected function get() {
|
||
|
return wp_remote_get( $this->endpoint, $this->args );
|
||
|
}
|
||
|
}
|