本文整理匯總了PHP中IXR_Request類的典型用法代碼示例。如果您正苦於以下問題:PHP IXR_Request類的具體用法?PHP IXR_Request怎麽用?PHP IXR_Request使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了IXR_Request類的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的PHP代碼示例。
示例1: query
function query()
{
$args = func_get_args();
$method = array_shift($args);
$request = new IXR_Request($method, $args);
$xml = trim($request->getXml());
$response = Jetpack_Client::remote_request($this->jetpack_args, $xml);
if (is_wp_error($response)) {
$this->error = new IXR_Error(-10520, sprintf('Jetpack: [%s] %s', $response->get_error_code(), $response->get_error_message()));
return false;
}
if (!$response) {
$this->error = new IXR_Error(-10520, 'Jetpack: Unknown Error');
return false;
}
if (200 != wp_remote_retrieve_response_code($response)) {
$this->error = new IXR_Error(-32300, 'transport error - HTTP status code was not 200');
return false;
}
$content = wp_remote_retrieve_body($response);
// Now parse what we've got back
$this->message = new IXR_Message($content);
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;
}
示例2: query
function query() {
$args = func_get_args();
$method = array_shift($args);
$request = new IXR_Request($method, $args);
$xml = $request->getXml();
$url = $this->scheme . '://' . $this->server . ':' . $this->port . $this->path;
$args = array(
'headers' => array('Content-Type' => 'text/xml'),
'user-agent' => $this->useragent,
'body' => $xml,
);
// Merge Custom headers ala #8145
foreach ( $this->headers as $header => $value )
$args['headers'][$header] = $value;
if ( $this->timeout !== false )
$args['timeout'] = $this->timeout;
// Now send the request
if ( $this->debug )
echo '<pre class="ixr_request">' . htmlspecialchars($xml) . "\n</pre>\n\n";
$response = wp_remote_post($url, $args);
if ( is_wp_error($response) ) {
$errno = $response->get_error_code();
$errorstr = $response->get_error_message();
$this->error = new IXR_Error(-32300, "transport error: $errno $errorstr");
return false;
}
if ( $response['response']['code'] != 200 ) {
$this->error = new IXR_Error(-32301, "transport error - HTTP status code was not 200 ({$response['response']['code']})");
return false;
}
if ( $this->debug )
echo '<pre class="ixr_response">' . htmlspecialchars($response['body']) . "\n</pre>\n\n";
// Now parse what we've got back
$this->message = new IXR_Message( $response['body'] );
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;
}
示例3: query
/**
* @return bool
*/
public function query()
{
$args = func_get_args();
$method = array_shift($args);
$request = new IXR_Request($method, $args);
$xml = $request->getXml();
$port = $this->port ? ":{$this->port}" : '';
$url = $this->scheme . '://' . $this->server . $port . $this->path;
$args = array('headers' => array('Content-Type' => 'text/xml'), 'user-agent' => $this->useragent, 'body' => $xml);
// Merge Custom headers ala #8145
foreach ($this->headers as $header => $value) {
$args['headers'][$header] = $value;
}
/**
* Filters the headers collection to be sent to the XML-RPC server.
*
* @since 4.4.0
*
* @param array $headers Array of headers to be sent.
*/
$args['headers'] = apply_filters('wp_http_ixr_client_headers', $args['headers']);
if ($this->timeout !== false) {
$args['timeout'] = $this->timeout;
}
// Now send the request
if ($this->debug) {
echo '<pre class="ixr_request">' . htmlspecialchars($xml) . "\n</pre>\n\n";
}
$response = wp_remote_post($url, $args);
if (is_wp_error($response)) {
$errno = $response->get_error_code();
$errorstr = $response->get_error_message();
$this->error = new IXR_Error(-32300, "transport error: {$errno} {$errorstr}");
return false;
}
if (200 != wp_remote_retrieve_response_code($response)) {
$this->error = new IXR_Error(-32301, 'transport error - HTTP status code was not 200 (' . wp_remote_retrieve_response_code($response) . ')');
return false;
}
if ($this->debug) {
echo '<pre class="ixr_response">' . htmlspecialchars(wp_remote_retrieve_body($response)) . "\n</pre>\n\n";
}
// Now parse what we've got back
$this->message = new IXR_Message(wp_remote_retrieve_body($response));
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;
}
示例4: query
/**
* This is our implementation of the query function from the IXR_Client class so that we can use the
* YDHttpClient class to do the HTTP stuff.
*/
function query()
{
// Get the function arguments
$args = func_get_args();
$method = array_shift($args);
// Create a new request
$request = new IXR_Request($method, $args);
// Create a new HTTP client
$client = new YDHttpClient($this->server, $this->port);
if (isset($this->timeout)) {
$client->setTimeout($this->timeout);
}
$client->useGzip(true);
$client->setDebug(YDConfig::get('YD_DEBUG'));
$client->path = $this->path;
$client->method = 'POST';
$client->contenttype = 'text/xml';
$client->postdata = str_replace("\n", '', $request->getXml());
$client->handle_redirects = false;
// Show in debugging mode
if ($this->debug) {
$tmp = htmlspecialchars($client->postdata);
echo '<pre>' . $tmp . YD_CRLF . '</pre>' . YD_CRLF . YD_CRLF;
}
// Now send the request
$result = $client->doRequest();
// Die with an error if any
if (!$result) {
$this->error = new IXR_Error(-32300, $client->getError());
return false;
}
// Get the contents
$contents = $client->getContent();
// Show in debugging mode
if ($this->debug) {
$tmp = htmlspecialchars($contents);
echo '<pre>' . $tmp . YD_CRLF . '</pre>' . YD_CRLF . YD_CRLF;
}
// Now parse what we've got back
$this->message = new IXR_Message($contents);
if (!$this->message->parse()) {
$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;
}
示例5: query
/**
* Set the query to send to the XML-RPC Server
* @since 0.1.0
*/
function query()
{
$args = func_get_args();
$method = array_shift($args);
$request = new IXR_Request($method, $args);
$length = $request->getLength();
$xml = $request->getXml();
if ($this->debug) {
echo '<pre>' . htmlspecialchars($xml) . "\n</pre>\n\n";
}
//This is where we deviate from the normal query()
//Rather than open a normal sock, we will actually use the cURL
//extensions to make the calls, and handle the SSL stuff.
//Since 04Aug2004 (0.1.3) - Need to include the port (duh...)
//Since 06Oct2004 (0.1.4) - Need to include the colon!!!
// (I swear I've fixed this before... ESP in live... But anyhu...)
$curl = curl_init('https://' . $this->server . ':' . $this->port . $this->path);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//Since 23Jun2004 (0.1.2) - Made timeout a class field
curl_setopt($curl, CURLOPT_TIMEOUT, $this->timeout);
if ($this->debug) {
curl_setopt($curl, CURLOPT_VERBOSE, 1);
}
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $xml);
curl_setopt($curl, CURLOPT_PORT, $this->port);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml", "Content-length: {$length}"));
// Process the SSL certificates, etc. to use
if (!($this->_certFile === false)) {
// We have a certificate file set, so add these to the cURL handler
curl_setopt($curl, CURLOPT_SSLCERT, $this->_certFile);
curl_setopt($curl, CURLOPT_SSLKEY, $this->_keyFile);
if ($this->debug) {
echo "SSL Cert at : " . $this->_certFile . "\n";
echo "SSL Key at : " . $this->_keyFile . "\n";
}
// See if we need to give a passphrase
if (!($this->_passphrase === '')) {
curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $this->_passphrase);
}
if ($this->_caFile === false) {
// Don't verify their certificate, as we don't have a CA to verify against
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
} else {
// Verify against a CA
curl_setopt($curl, CURLOPT_CAINFO, $this->_caFile);
}
}
// Call cURL to do it's stuff and return us the content
$contents = curl_exec($curl);
curl_close($curl);
// Check for 200 Code in $contents
if (!strstr($contents, '200 OK')) {
//There was no "200 OK" returned - we failed
$this->error = new IXR_Error(-32300, 'transport error - HTTP status code was not 200');
return false;
}
if ($this->debug) {
echo '<pre>' . htmlspecialchars($contents) . "\n</pre>\n\n";
}
// Now parse what we've got back
// Since 20Jun2004 (0.1.1) - We need to remove the headers first
// Why I have only just found this, I will never know...
// So, remove everything before the first <
$contents = substr($contents, strpos($contents, '<'));
$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;
}
示例6: query
function query()
{
$args = func_get_args();
$method = array_shift($args);
$request = new IXR_Request($method, $args);
$xml = $request->getXml();
$this->headers['Content-Type'] = 'text/xml';
if (!$this->sendRequest($this->posturl, $xml, 'POST')) {
$this->xmlerror = new IXR_Error(-32300, 'transport error - ' . $this->error);
return false;
}
// Check HTTP Response code
if ($this->status < 200 || $this->status > 206) {
$this->xmlerror = new IXR_Error(-32300, 'transport error - HTTP status ' . $this->status);
return false;
}
// Now parse what we've got back
$this->message = new IXR_Message($this->resp_body);
if (!$this->message->parse()) {
// XML error
$this->xmlerror = new IXR_Error(-32700, 'parse error. not well formed');
return false;
}
// Is the message a fault?
if ($this->message->messageType == 'fault') {
$this->xmlerror = new IXR_Error($this->message->faultCode, $this->message->faultString);
return false;
}
// Message must be OK
return true;
}
示例7: query
function query()
{
$args = func_get_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}";
$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: {$errno} {$errstr}");
return false;
}
fputs($fp, $request);
$contents = '';
$debug_contents = '';
$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(-32301, 'transport error - HTTP status code was not 200');
return false;
}
$gotFirstLine = true;
}
if (trim($line) == '') {
$gettingHeaders = false;
}
if (!$gettingHeaders) {
$contents .= trim($line);
}
if ($this->debug) {
$debug_contents .= $line;
}
}
if ($this->debug) {
echo '<pre class="ixr_response">' . htmlspecialchars($debug_contents) . "\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;
}
示例8: query
function query()
{
$args = func_get_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}";
$this->headers['Host'] = preg_replace('#^ssl://#', '', $this->server);
$this->headers['Content-Type'] = 'text/xml';
$this->headers['User-Agent'] = $this->useragent;
$this->headers['Content-Length'] = $length;
if (class_exists('WP_Http')) {
$args = array('method' => 'POST', 'body' => $xml, 'headers' => $this->headers, 'sslverify' => false);
if ($this->timeout) {
$args['timeout'] = $this->timeout;
}
$http = new WP_Http();
if ($this->ssl) {
$url = sprintf('https://%s%s', $this->server, $this->path);
} else {
$url = sprintf('http://%s%s', $this->server, $this->path);
}
$result = $http->request($url, $args);
if (is_wp_error($result)) {
foreach ($result->errors as $type => $messages) {
$this->error = new IXR_Error(-32702, sprintf('WP_Http error: %s, %s', $type, $messages[0]));
break;
}
return false;
} else {
if ($result['response']['code'] > 299 || $result['response']['code'] < 200) {
$this->error = new IXR_Error(-32701, sprintf('Server rejected request (HTTP response: %s %s)', $result['response']['code'], $result['response']['message']));
return false;
}
}
// Now parse what we've got back
$this->message = new IXR_Message($result['body']);
} else {
foreach ($this->headers as $header => $value) {
$request .= "{$header}: {$value}{$r}";
}
$request .= $r;
$request .= $xml;
// Now send the request
if ($this->ssl) {
$host = 'ssl://' . $this->server;
} else {
$host = $this->server;
}
if ($this->timeout) {
$fp = @fsockopen($host, $this->port, $errno, $errstr, $this->timeout);
} else {
$fp = @fsockopen($host, $this->port, $errno, $errstr);
}
if (!$fp) {
$this->error = new IXR_Error(-32300, "Transport error - could not open socket: {$errno} {$errstr}");
return false;
}
fputs($fp, $request);
$contents = '';
$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(-32301, 'transport error - HTTP status code was not 200');
return false;
}
$gotFirstLine = true;
}
if (trim($line) == '') {
$gettingHeaders = false;
}
if (!$gettingHeaders) {
$contents .= trim($line);
}
}
// 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;
}
示例9: query
function query()
{
$args = func_get_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}";
$request .= "Host: {$this->server}{$r}";
$request .= "Content-Type: text/xml{$r}";
$request .= "User-Agent: {$this->useragent}{$r}";
$request .= "Content-length: {$length}{$r}{$r}";
$request .= $xml;
// Now send the request
if ($this->debug) {
echo '<pre>' . htmlspecialchars($request) . "\n</pre>\n\n";
}
$fp = @fsockopen($this->server, $this->port);
if (!$fp) {
$this->error = new IXR_Error(-32300, 'transport error - could not open socket');
return false;
}
fputs($fp, $request);
$contents = '';
$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) {
$contents .= trim($line) . "\n";
}
}
if ($this->debug) {
echo '<pre>' . htmlspecialchars($contents) . "\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;
}
示例10: query
function query()
{
$args = func_get_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}";
$request .= "Host: {$this->server}{$r}";
$request .= "Content-Type: text/xml{$r}";
$request .= "User-Agent: {$this->useragent}{$r}";
// Accept gzipped response if zlib and if php4.3+ (fgets turned binary safe)
if (extension_loaded('zlib') && preg_match('#^(4\\.[3-9])|([5-9])#', phpversion())) {
$request .= "Accept-Encoding: gzip{$r}";
}
$request .= "Content-length: {$length}{$r}{$r}";
$request .= $xml;
// Now send the request
if ($this->debug) {
echo '<pre>' . htmlspecialchars($request) . "\n</pre>\n\n";
}
// This is to find out when the script unexpectedly dies due to fsockopen
ob_start(NULL, 2048);
echo "Trying to connect to an RPC Server...";
$fp = is_callable('fsockopen') ? fsockopen($this->server, $this->port, $errno, $errstr, 45) : false;
ob_end_clean();
if (!$fp) {
$this->error = new IXR_Error(-32300, 'transport error - could not open socket (' . $errstr . ')');
return false;
}
fputs($fp, $request);
$contents = '';
$gotFirstLine = false;
$gettingHeaders = true;
$is_gzipped = false;
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 ($gettingHeaders && trim($line) == '') {
$gettingHeaders = false;
continue;
}
if (!$gettingHeaders) {
// We do a binary comparison of the first two bytes, see
// rfc1952, to check wether the content is gzipped.
if ($contents == '' && strncmp($line, "‹", 2) === 0) {
$is_gzipped = true;
}
$contents .= $is_gzipped ? $line : trim($line) . "\n";
}
}
# if gzipped, strip the 10 byte header, and pass it to gzinflate (rfc1952)
if ($is_gzipped) {
$contents = gzinflate(substr($contents, 10));
//simulate trim() for each line; don't know why, but it won't work otherwise
$contents = preg_replace('#^[\\x20\\x09\\x0A\\x0D\\x00\\x0B]*(.*)[\\x20\\x09\\x0A\\x0D\\x00\\x0B]*$#m', '\\1', $contents);
}
if ($this->debug) {
echo '<pre>' . htmlspecialchars($contents) . "\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;
}
示例11: query
/**
* Set the query to send to the XML-RPC Server
* @since 0.1.0
*/
function query()
{
$args = func_get_args();
$method = array_shift($args);
$request = new IXR_Request($method, $args);
$length = $request->getLength();
$xml = $request->getXml();
if ($this->debug) {
echo '<pre>' . htmlspecialchars($xml) . "\n</pre>\n\n";
}
//This is where we deviate from the normal query()
//Rather than open a normal sock, we will actually use the cURL
//extensions to make the calls, and handle the SSL stuff.
//Since 04Aug2004 (0.1.3) - Need to include the port (duh...)
//Since 06Oct2004 (0.1.4) - Need to include the colon!!!
// (I swear I've fixed this before... ESP in live... But anyhu...)
$curl = curl_init('https://' . $this->server . ':' . $this->port . $this->path);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//Since 23Jun2004 (0.1.2) - Made timeout a class field
curl_setopt($curl, CURLOPT_TIMEOUT, $this->timeout);
if ($this->debug) {
curl_setopt($curl, CURLOPT_VERBOSE, 1);
}
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $xml);
curl_setopt($curl, CURLOPT_PORT, $this->port);
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml", "Content-length: {$length}"));
//Process the SSL certificates, etc. to use
if (!($this->_certFile === false)) {
//We have a certificate file set, so add these to the cURL handler
curl_setopt($curl, CURLOPT_SSLCERT, $this->_certFile);
curl_setopt($curl, CURLOPT_SSLKEY, $this->_keyFile);
if ($this->debug) {
echo "SSL Cert at : " . $this->_certFile . "\n";
echo "SSL Key at : " . $this->_keyFile . "\n";
}
//See if we need to give a passphrase
if (!($this->_passphrase === '')) {
curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $this->_passphrase);
}
}
if ($this->_caFile === false) {
//Don't verify their certificate, as we don't have a CA to verify against
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
} else {
//Verify against a CA
curl_setopt($curl, CURLOPT_CAINFO, $this->_caFile);
}
//Call cURL to do it's stuff and return us the content
$response = curl_exec($curl);
curl_close($curl);
$contents = '';
$gotFirstLine = false;
$gettingHeaders = true;
$lines = explode("\n", $response);
foreach ($lines as $line) {
$line = rtrim($line);
if (!$gotFirstLine) {
// get response code
list($httpVersion, $responseCode, $responseMessage) = split(" ", rtrim($line), 3);
$gotFirstLine = true;
}
if (trim($line) == '') {
$gettingHeaders = false;
}
if (!$gettingHeaders) {
$contents .= trim($line);
}
}
// Check line for '200'
if ($responseCode != '200') {
$this->error = new IXR_Error(-32300, 'transport error - HTTP status code was ' . $responseCode . ' (' . $responseMessage . ')');
return false;
}
if ($this->debug) {
echo '<pre>' . htmlspecialchars($contents) . "\n</pre>\n\n";
}
$this->message = new IXR_Message($contents);
if (!$this->message->parse()) {
// XML error
$this->error = new IXR_Error(-32700, 'parse error. not well formed');
error_log(print_r($this, true));
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;
}
示例12: query
function query($args)
{
//$args = func_get_args();
$method = array_shift($args);
$request = new IXR_Request($method, $args);
$length = $request->getLength();
$xml = $request->getXml();
if ($this->debug) {
echo '<pre>' . htmlspecialchars($xml) . "\n</pre>\n\n";
}
$curl = curl_init('http://' . $this->server . ':' . $this->port . $this->path);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//Since 23Jun2004 (0.1.2) - Made timeout a class field
curl_setopt($curl, CURLOPT_TIMEOUT, $this->timeout);
if ($this->debug) {
curl_setopt($curl, CURLOPT_VERBOSE, 1);
}
curl_setopt($curl, CURLOPT_COOKIEFILE, $this->cookiePath);
curl_setopt($curl, CURLOPT_COOKIEJAR, $this->cookiePath);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $xml);
curl_setopt($curl, CURLOPT_PORT, $this->port);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml", "Content-length: {$length}"));
// Call cURL to do it's stuff and return us the content
$contents = curl_exec($curl);
curl_close($curl);
// Check for 200 Code in $contents
if (!strstr($contents, '200 OK')) {
//There was no "200 OK" returned - we failed
$this->error = new IXR_Error(-32300, 'transport error - HTTP status code was not 200');
return false;
}
if ($this->debug) {
echo '<pre>' . htmlspecialchars($contents) . "\n</pre>\n\n";
}
// Now parse what we've got back
// Since 20Jun2004 (0.1.1) - We need to remove the headers first
// Why I have only just found this, I will never know...
// So, remove everything before the first <
$contents = substr($contents, strpos($contents, '<'));
$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;
}
示例13: __rpcCall
/**
* 執行請求
*
* @access public
* @return void
*/
public function __rpcCall()
{
$args = func_get_args();
$method = array_shift($args);
$request = new IXR_Request($method, $args);
$xml = $request->getXml();
$client = Typecho_Http_Client::get();
if (!$client) {
$this->error = new IXR_Error(-32300, 'transport error - could not open socket');
return false;
}
$client->setHeader('Content-Type', 'text/xml')->setHeader('User-Agent', $this->useragent)->setData($xml)->send($this->url);
$contents = $client->getResponseBody();
if ($this->debug) {
echo '<pre>' . htmlspecialchars($contents) . "\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;
}
示例14: open
function open()
{
global $xml_rpc_validator_errors;
$args = func_get_args();
$method = array_shift($args);
$request = new IXR_Request($method, $args);
$length = $request->getLength();
$xml = $request->getXml();
$this->headers['Content-Type'] = 'text/xml';
$this->headers['User-Agent'] = $this->useragent;
$this->headers['Content-Length'] = $length;
$this->headers['Accept'] = '*/*';
if (!empty($this->HTTP_auth_user_login)) {
xml_rpc_validator_logIO("I", "HTTP auth header set " . $this->HTTP_auth_user_login . ':' . $this->HTTP_auth_user_pass);
$this->headers['Authorization'] = 'Basic ' . base64_encode($this->HTTP_auth_user_login . ':' . $this->HTTP_auth_user_pass);
}
$requestParameter = array();
$requestParameter = array('headers' => $this->headers);
$requestParameter['method'] = 'POST';
$requestParameter['body'] = $xml;
$requestParameter['timeout'] = REQUEST_HTTP_TIMEOUT;
xml_rpc_validator_logIO("I", "HTTP Request headers: " . print_r($this->headers, TRUE));
xml_rpc_validator_logIO("I", "XML-RPC Request: ");
if (strpos($method, 'metaWeblog.newMediaObject') === false) {
//do not log the whole picture upload request document
xml_rpc_validator_logXML("I", $xml);
} else {
xml_rpc_validator_logXML("I", substr($xml, 0, 100));
}
$xmlrpc_request = new WP_Http();
$this->response = $xmlrpc_request->request($this->URL, $requestParameter);
xml_rpc_validator_logIO("O", "Response details below ->");
//xml_rpc_validator_logIO("O", "RAW response: ". print_r ($this->response, TRUE));
xml_rpc_validator_logIO("O", "HTTP Response code: " . print_r($this->response['response']['code'] . ' - ' . $this->response['response']['message'], TRUE));
xml_rpc_validator_logIO("O", "HTTP Response headers: " . print_r($this->response['headers'], TRUE));
// Handle error here.
if (is_wp_error($this->response)) {
return $this->response;
} elseif (strcmp($this->response['response']['code'], '200') != 0) {
return new WP_Error($this->response['response']['code'], $this->response['response']['message']);
}
xml_rpc_validator_logIO("O", "HTTP Response Body:", TRUE);
$contents = trim($this->response['body']);
xml_rpc_validator_logXML("O", $contents);
if (empty($contents)) {
$error_obj = $xml_rpc_validator_errors['MISSING_XMLRPC_METHODS'];
$this->error = new WP_Error($error_obj['code'], $error_obj['message']);
return $this->error;
} else {
//check the first character
if ($contents[0] !== '<') {
$error_obj = $xml_rpc_validator_errors['XMLRPC_RESPONSE_MALFORMED_1'];
$this->error = new WP_Error($error_obj['code'], $error_obj['message']);
return $this->error;
}
}
//check the characters within the response
if ($this->check_UTF8($contents) !== true) {
$error_obj = $xml_rpc_validator_errors['XMLRPC_RESPONSE_CONTAINS_INVALID_CHARACTERS'];
$this->error = new WP_Error($error_obj['code'], $error_obj['message']);
return $this->error;
}
// Now parse what we've got back
$this->message = new IXR_Message($contents);
if (!$this->message->parse()) {
// XML error
$error_obj = $xml_rpc_validator_errors['XMLRPC_RESPONSE_MALFORMED_2'];
$this->error = new WP_Error($error_obj['code'], $error_obj['message']);
return $this->error;
}
// Is the message a fault?
if ($this->message->messageType == 'fault') {
$this->error = new WP_Error($this->message->faultCode, $this->message->faultString);
return $this->error;
}
return $this->message->params[0];
}
示例15: queryIgnoreResult
function queryIgnoreResult()
{
$args = func_get_args();
$method = array_shift($args);
if (!$this->socket || $this->protocol == 0) {
$this->error = new IXR_Error(-32300, 'transport error - client not initialized');
return false;
}
$request = new IXR_Request($method, $args);
// Check if the request is greater than 512 Kbytes to avoid errors
// If the method is system.multicall, make two calls (possibly recursively)
if (($size = $request->getLength()) > 1024 * 1024 - 8) {
if ($method = 'system.multicall' && isset($args[0])) {
$count = count($args[0]);
// If count is 1, query cannot be reduced
if ($count < 2) {
$this->error = new IXR_Error(-32300, "transport error - request too large ({$size})");
return false;
}
$length = floor($count / 2);
$args1 = array_slice($args[0], 0, $length);
$args2 = array_slice($args[0], $length, $count - $length);
$res1 = $this->queryIgnoreResult('system.multicall', $args1);
$res2 = $this->queryIgnoreResult('system.multicall', $args2);
return $res1 && $res2;
} else {
$this->error = new IXR_Error(-32300, "transport error - request too large ({$size})");
return false;
}
}
// Send request
$ok = $this->sendRequest($request);
if (!$ok) {
$this->error = new IXR_Error(-32300, 'transport error - connection interrupted!');
return false;
}
return true;
}