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