milo / xml-rpc
轻量级的XML-RPC库。
v3.0.0
2020-04-03 10:52 UTC
Requires
- php: >=7.1
- ext-dom: *
- ext-libxml: *
Requires (Dev)
- nette/tester: ~2.3.0
README
这个库可以帮助处理XML-RPC的调用和响应。它只要求PHP DOM扩展。它基于http://www.xmlrpc.com/上的规范。
自3.0版本发布以来,需要PHP 7.1或更高版本。v2.x版本支持PHP 5.4。
以下是一些简单的XML-RPC客户端和服务器示例。
客户端
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());
服务器 - 手动
这是一个echo服务器的示例。它只返回我们调用的方法名称及其参数的数组。
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);
服务器 - 自动
这是一个比上面更自动处理方法的示例。
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) { ... });
安装
通过 Composer composer require milo/xml-rpc
或手动下载并 require 'src/xml-rpc.php';
许可证
您可以使用所有文件,依据新BSD许可协议、GNU公共许可证(GPL)版本2或3,或MIT许可证的条款。
测试
测试是用 Nette Tester 编写的,需要Composer来运行它们。
# Download the Tester composer update # Run the tests vendor/bin/tester tests