[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-includes/ -> class-wp-http-ixr-client.php (source)

   1  <?php
   2  /**
   3   * WP_HTTP_IXR_Client
   4   *
   5   * @package WordPress
   6   * @since 3.1.0
   7   */
   8  #[AllowDynamicProperties]
   9  class WP_HTTP_IXR_Client extends IXR_Client {
  10      public $scheme;
  11      /**
  12       * @var IXR_Error
  13       */
  14      public $error;
  15  
  16      /**
  17       * @param string       $server
  18       * @param string|false $path
  19       * @param int|false    $port
  20       * @param int          $timeout
  21       */
  22  	public function __construct( $server, $path = false, $port = false, $timeout = 15 ) {
  23          if ( ! $path ) {
  24              // Assume we have been given a URL instead.
  25              $bits         = parse_url( $server );
  26              $this->scheme = $bits['scheme'];
  27              $this->server = $bits['host'];
  28              $this->port   = isset( $bits['port'] ) ? $bits['port'] : $port;
  29              $this->path   = ! empty( $bits['path'] ) ? $bits['path'] : '/';
  30  
  31              // Make absolutely sure we have a path.
  32              if ( ! $this->path ) {
  33                  $this->path = '/';
  34              }
  35  
  36              if ( ! empty( $bits['query'] ) ) {
  37                  $this->path .= '?' . $bits['query'];
  38              }
  39          } else {
  40              $this->scheme = 'http';
  41              $this->server = $server;
  42              $this->path   = $path;
  43              $this->port   = $port;
  44          }
  45          $this->useragent = 'The Incutio XML-RPC PHP Library';
  46          $this->timeout   = $timeout;
  47      }
  48  
  49      /**
  50       * @since 3.1.0
  51       * @since 5.5.0 Formalized the existing `...$args` parameter by adding it
  52       *              to the function signature.
  53       *
  54       * @return bool
  55       */
  56  	public function query( ...$args ) {
  57          $method  = array_shift( $args );
  58          $request = new IXR_Request( $method, $args );
  59          $xml     = $request->getXml();
  60  
  61          $port = $this->port ? ":$this->port" : '';
  62          $url  = $this->scheme . '://' . $this->server . $port . $this->path;
  63          $args = array(
  64              'headers'    => array( 'Content-Type' => 'text/xml' ),
  65              'user-agent' => $this->useragent,
  66              'body'       => $xml,
  67          );
  68  
  69          // Merge Custom headers ala #8145.
  70          foreach ( $this->headers as $header => $value ) {
  71              $args['headers'][ $header ] = $value;
  72          }
  73  
  74          /**
  75           * Filters the headers collection to be sent to the XML-RPC server.
  76           *
  77           * @since 4.4.0
  78           *
  79           * @param string[] $headers Associative array of headers to be sent.
  80           */
  81          $args['headers'] = apply_filters( 'wp_http_ixr_client_headers', $args['headers'] );
  82  
  83          if ( false !== $this->timeout ) {
  84              $args['timeout'] = $this->timeout;
  85          }
  86  
  87          // Now send the request.
  88          if ( $this->debug ) {
  89              echo '<pre class="ixr_request">' . htmlspecialchars( $xml ) . "\n</pre>\n\n";
  90          }
  91  
  92          $response = wp_remote_post( $url, $args );
  93  
  94          if ( is_wp_error( $response ) ) {
  95              $errno       = $response->get_error_code();
  96              $errorstr    = $response->get_error_message();
  97              $this->error = new IXR_Error( -32300, "transport error: $errno $errorstr" );
  98              return false;
  99          }
 100  
 101          if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
 102              $this->error = new IXR_Error( -32301, 'transport error - HTTP status code was not 200 (' . wp_remote_retrieve_response_code( $response ) . ')' );
 103              return false;
 104          }
 105  
 106          if ( $this->debug ) {
 107              echo '<pre class="ixr_response">' . htmlspecialchars( wp_remote_retrieve_body( $response ) ) . "\n</pre>\n\n";
 108          }
 109  
 110          // Now parse what we've got back.
 111          $this->message = new IXR_Message( wp_remote_retrieve_body( $response ) );
 112          if ( ! $this->message->parse() ) {
 113              // XML error.
 114              $this->error = new IXR_Error( -32700, 'parse error. not well formed' );
 115              return false;
 116          }
 117  
 118          // Is the message a fault?
 119          if ( 'fault' === $this->message->messageType ) {
 120              $this->error = new IXR_Error( $this->message->faultCode, $this->message->faultString );
 121              return false;
 122          }
 123  
 124          // Message must be OK.
 125          return true;
 126      }
 127  }


Generated : Thu Nov 21 08:20:01 2024 Cross-referenced by PHPXref