如何在PHP的XML-RPC服务器方法中返回错误响应?
在PHP中使用xmlrpc_server_call_method()返回带错误码的XML-RPC错误响应
当使用PHP的XML-RPC扩展,通过xmlrpc_server_call_method()处理请求时,常规成功响应可以正常生成XML,但方法执行失败(如创建帖子失败)时,直接返回false只会生成带布尔值0的普通响应,无法返回包含错误码的标准XML-RPC错误结构。
示例代码
function make_post($input) { // 模拟创建帖子的逻辑 $post_created = false; // 模拟创建失败 $post_id = 123; if($post_created == true) { return $post_id; } else { // 这里需要触发标准错误响应 return false; // 当前写法无法生成期望的错误XML } } // 初始化XML-RPC服务器 $server = xmlrpc_server_create(); xmlrpc_server_register_method($server, 'metaWeblog.newPost', 'make_post'); // 构造模拟请求 $request = xmlrpc_encode_request("metaWeblog.newPost", null, array('encoding' => 'utf-8')); // 调用处理方法 $response = xmlrpc_server_call_method($server, $request, null, [ 'encoding' => 'utf-8' ]); var_dump($response);
当前输出
<?xml version="1.0" encoding="utf-8"?> <methodResponse> <params> <param> <value> <boolean>0</boolean> </value> </param> </params> </methodResponse>
期望输出
<?xml version="1.0" encoding="utf-8"?> <methodResponse> <fault> <value> <struct> <member> <name>faultCode</name> <value><int>4</int></value> </member> <member> <name>faultString</name> <value><string>创建帖子失败,请检查参数或重试</string></value> </member> </struct> </value> </fault> </methodResponse>
解决方案
要生成符合XML-RPC规范的错误响应,需要按以下步骤操作:
- 在方法执行失败的分支中,构造包含
faultCode(整数类型错误码)和faultString(字符串类型错误描述)的关联数组 - 使用
xmlrpc_set_type()函数将该数组标记为XML-RPC的fault类型 - 返回这个经过标记的数组,
xmlrpc_server_call_method()会自动生成标准的错误响应XML
修改后的make_post函数示例:
function make_post($input) { // 模拟创建帖子的逻辑 $post_created = false; // 模拟创建失败 $post_id = 123; if($post_created == true) { return $post_id; } else { // 构造错误响应数组 $error_response = [ 'faultCode' => 4, 'faultString' => '创建帖子失败,请检查参数或重试' ]; // 将数组标记为fault类型 xmlrpc_set_type($error_response, 'fault'); return $error_response; } }
执行修改后的代码,就能得到符合期望的XML错误响应。
内容的提问来源于stack exchange,提问作者oelna
相关产品推荐
相关产品推荐

