| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 | <?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 null|WP_Error 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 );	}}
 |