milo / xml-rpc
Lightweight XML-RPC library.
Installs: 179 634
Dependents: 1
Suggesters: 0
Security: 0
Stars: 8
Watchers: 2
Forks: 4
Open Issues: 1
Requires
- php: >=7.1
- ext-dom: *
- ext-libxml: *
Requires (Dev)
- nette/tester: ~2.3.0
README
This library helps to work with XML-RPC calls and responses. It requires only PHP DOM extension. It is based on word written specification on http://www.xmlrpc.com/.
PHP 7.1 or newer is required since v3.0 release. The v2.x releases supports PHP 5.4.
Simple XML-RPC client and server examples follow.
Client
require 'src/xml-rpc.php'; use Milo\XmlRpc; # Converter between XML source and PHP classes $converter = new XmlRpc\Converter; # Method we are calling and its arguments $call = new XmlRpc\MethodCall('math.power', [2, 3]); # Perform request over HTTP $context = stream_context_create([ 'http' => array( 'method' => 'POST', 'header' => 'Content-type: text/xml', 'content' => $converter->toXml($call), ), ]); $xml = file_get_contents('http://example.com', false, $context); # XML response parsing $response = $converter->fromXml($xml); if (!$response instanceof XmlRpc\MethodResponse) { throw new Exception('Expected method response. Got ' . get_class($response)); } # Returned value var_dump($response->getReturnValue());
Server - manually
An example of echo
server. It only returns array with method name and its arguments which we called.
require 'src/xml-rpc.php'; use Milo\XmlRpc; # Converter between XML source and PHP classes $converter = new XmlRpc\Converter; # Incoming XML $xml = file_get_contents('php://input'); try { $call = $converter->fromXml($xml); if (!$call instanceof XmlRpc\MethodCall) { throw new Exception('Expected method call. Got ' . get_class($call)); } # Echo response $response = new XmlRpc\MethodResponse([ 'youCalled' => $call->getName(), 'withParameters' => $call->getParameters(), ]); } catch (XmlRpc\RuntimeException $e) { # Fault response on error $response = XmlRpc\MethodFaultResponse::fromException($e); } # Print XML on standard output echo $converter->toXml($response);
Server - automatically
An example of methods handling more automatically than above.
require 'src/xml-rpc.php'; use Milo\XmlRpc; # Incoming XML $xml = file_get_contents('php://input'); # Method call handler server $server = new XmlRpc\Server; $server->registerHandler( 'my.method', ['string', 'int', '2?' => 'bool|null'], function ($string, $int, $bool = null) { # Throw XmlRpc\FaultResponseException and client will get your error message and code. # Throw anything else and client will get fault response with code 500. return [...]; } ); # Handle XML directly. All exceptions are caught and converted to fault response. echo $server->handleXml($xml, $faultCode); # $faultCode is filled by fault response code # Or handle MethodCall object. $converter = new XmlRpc\Converter; # It may throw exception on invalid XML. $call = $converter->fromXml($xml); # All exceptions are caught and converted to fault response. $response = $server->handle($call); # Print XML on standard output echo $converter->toXml($response); # To log what's happening inside. $server->addLogger(function (MethodCall $call = null, IMethodResponse $response = null, \Exception $e = null) { ... });
Installation
By Composer composer require milo/xml-rpc
or download manually and require 'src/xml-rpc.php';
License
You may use all files under the terms of the New BSD Licence, or the GNU Public Licence (GPL) version 2 or 3, or the MIT Licence.
Tests
Tests are written for Nette Tester, the Composer is required to run them:
# Download the Tester composer update # Run the tests vendor/bin/tester tests