milo/xml-rpc

轻量级的XML-RPC库。

v3.0.0 2020-04-03 10:52 UTC

This package is auto-updated.

Last update: 2024-09-04 23:03:10 UTC


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

Build Status