IXR_Client::query()publicWP 1.5.0

Method of the class: IXR_Client{}

No Hooks.

Return

true|false.

Usage

$IXR_Client = new IXR_Client();
$IXR_Client->query( ...$args );
...$args (required)
-

Changelog

Since 1.5.0 Introduced.
Since 5.5.0 Formalized the existing ...$args parameter by adding it to the function signature.

IXR_Client::query() code WP 6.5.2

function query( ...$args )
{
    $method = array_shift($args);
    $request = new IXR_Request($method, $args);
    $length = $request->getLength();
    $xml = $request->getXml();
    $r = "\r\n";
    $request  = "POST {$this->path} HTTP/1.0$r";

    // Merged from WP #8145 - allow custom headers
    $this->headers['Host']          = $this->server;
    $this->headers['Content-Type']  = 'text/xml';
    $this->headers['User-Agent']    = $this->useragent;
    $this->headers['Content-Length']= $length;

    foreach( $this->headers as $header => $value ) {
        $request .= "{$header}: {$value}{$r}";
    }
    $request .= $r;

    $request .= $xml;

    // Now send the request
    if ($this->debug) {
        echo '<pre class="ixr_request">'.htmlspecialchars($request)."\n</pre>\n\n";
    }

    if ($this->timeout) {
        $fp = @fsockopen($this->server, $this->port, $errno, $errstr, $this->timeout);
    } else {
        $fp = @fsockopen($this->server, $this->port, $errno, $errstr);
    }
    if (!$fp) {
        $this->error = new IXR_Error(-32300, 'transport error - could not open socket');
        return false;
    }
    fputs($fp, $request);
    $contents = '';
    $debugContents = '';
    $gotFirstLine = false;
    $gettingHeaders = true;
    while (!feof($fp)) {
        $line = fgets($fp, 4096);
        if (!$gotFirstLine) {
            // Check line for '200'
            if (strstr($line, '200') === false) {
                $this->error = new IXR_Error(-32300, 'transport error - HTTP status code was not 200');
                return false;
            }
            $gotFirstLine = true;
        }
        if (trim($line) == '') {
            $gettingHeaders = false;
        }
        if (!$gettingHeaders) {
        	// merged from WP #12559 - remove trim
            $contents .= $line;
        }
        if ($this->debug) {
        	$debugContents .= $line;
        }
    }
    if ($this->debug) {
        echo '<pre class="ixr_response">'.htmlspecialchars($debugContents)."\n</pre>\n\n";
    }

    // Now parse what we've got back
    $this->message = new IXR_Message($contents);
    if (!$this->message->parse()) {
        // XML error
        $this->error = new IXR_Error(-32700, 'parse error. not well formed');
        return false;
    }

    // Is the message a fault?
    if ($this->message->messageType == 'fault') {
        $this->error = new IXR_Error($this->message->faultCode, $this->message->faultString);
        return false;
    }

    // Message must be OK
    return true;
}