如何从 PHP 访问 XML-RPC 数据?

Posted

技术标签:

【中文标题】如何从 PHP 访问 XML-RPC 数据?【英文标题】:How do I access XML-RPC data from PHP? 【发布时间】:2011-07-28 05:32:27 【问题描述】:

远程服务器正在通过 RPC 将 XML POST 到我的服务器。当我打开 mod 安全性时,我可以在我的 Apache 日志中看到 XML,但我无法从我的 php 脚本访问 XML。应该是 POST 请求,但是 $_POST 数组是空的。

我的理解是 RPC 应该用数据调用我的函数,但这似乎没有发生。

这个非常简单的脚本应该将 XML 写入日志文件,但它什么也没做:

include_once('xmlrpc/xmlrpc.inc'); include_once('xmlrpc/xmlrpcs.inc'); 函数 ImportOrders($xml) $FH=fopen('Log/In.txt','a'); fwrite($FH,'收到的包裹:'.print_r($xml,true)."\n"); // 设置合适的响应码 $响应 = 0; // 查看此应用程序定义的响应代码 // 发送成功或失败响应码 如果($响应 == 0) 返回新的xmlrpcresp(新的xmlrpcval($response,“字符串”)); 别的 返回新的 xmlrpcresp(0, $response, $error_message); $Server = 新的 xmlrpc_server( array("ImportOrders"=>array("函数"=>"ImportOrders") ) );

他们给我发了这个:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<methodCall>
<methodName>ImportOrders</methodName>
<params>
<param>
<value><int>2</int></value>
</param>
<param>
<value><struct>
<member><name>order_0</name>
<value><struct>
<member><name>order_id</name>
....

为什么我的函数没有被调用?!?

【问题讨论】:

【参考方案1】:

知道了!显然数据在“$GLO​​BALS['HTTP_RAW_POST_DATA']”中。

需要'kd_xmlrpc.php'; $xmlrpc_request = XMLRPC_parse($GLOBALS['HTTP_RAW_POST_DATA']); $methodName = XMLRPC_getMethodName($xmlrpc_request); $params = XMLRPC_getParams($xmlrpc_request); 进口订单($params); 函数 ImportOrders($params) $FH=fopen('Log/In.txt','a'); fwrite($FH,'OrderDataRes 已加载。'."\n"); fwrite($FH,'$params: '.print_r($params,true)."\n");

我也在使用不同的库,来自: http://www.keithdevens.com/software/xmlrpc/source.php

【讨论】:

以上是关于如何从 PHP 访问 XML-RPC 数据?的主要内容,如果未能解决你的问题,请参考以下文章

XML-RPC:如何使过程调用可以访问登录凭据?

用Groovy实现对Snipplr的XML-RPC访问

Odoo(OpenERP)开发实践:通过XML-RPC接口访问Odoo数据库

如何检查 WordPress 中是不是启用了 XML-RPC

如何在 python 中发送 xml-rpc 请求?

从Minos部署系统谈谈XML-RPC