codeIgniter3 学习笔记九(XML-RPC)

XML-RPC

CodeIgniter 的 XML-RPC 类允许你向另外一个服务器发送请求,或者建立一个自己的 XML-RPC 服务器来接受请求

注:使用 XML-RPC 是必须保证 PHP 版本低于版本7,版本7 不支持 each 方法


案例一: 发送请求

class Text extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        // 加载 xmlrpc 模块
        $this->load->library('xmlrpc');
    }
    public function send()
    {
        // 设置服务器地址和端口
        $this->xmlrpc->server('http://rpc.pingmatic.com/', 80);
        // 设置调用服务器中的类的方法(即调用 weblogUpdates类中的 ping 方法)
        $this->xmlrpc->method('weblogUpdates.ping');
        // 设置请求参数
        $request = array('My Photoblog', 'http://www.my-site.com/photoblog');
        // 发送请求
        $this->xmlrpc->send_request($request);
        
        if ( ! $this->xmlrpc->send_request())
        {
            // 请求出现错误
            echo $this->xmlrpc->display_error();
        }
    }
}

案例二:创建服务监听

class Text extends CI_Controller {

    public function getUserInfo($request)
    {
        $username = 'smitty';
        $password = 'secretsmittypass';

        $this->load->library('xmlrpc');

        // 获取请求参数
        $parameters = $request->output_parameters();

        if ($parameters[1] != $username && $parameters[2] != $password)
        {
            // 发送错误信息
            return $this->xmlrpc->send_error_message('100', 'Invalid Access');
        }

        $response = array(
            array(
                'nickname'  => array('Smitty', 'string'),
                'userid'    => array('99', 'string'),
                'url'       => array('http://yoursite.com', 'string'),
                'email'     => array('jsmith@yoursite.com', 'string'),
                'lastname'  => array('Smith', 'string'),
                'firstname' => array('John', 'string')
            ),
            // 数据类型
            'struct'
        );

        return $this->xmlrpc->send_response($response);
    }
}

案例三:创建服务器和客户端

  • 服务端 application/controllers/Xmlrpc_server.php
class Xmlrpc_server extends CI_Controller
{

    public function index()
    {
        // 加载模型
        $this->load->library('xmlrpc');
        $this->load->library('xmlrpcs');

        // 设置加载服务端方法,根据请求参数匹配对应类中的方法
        $config['functions']['Greetings'] = array('function' => 'Xmlrpc_server.process');

        // 加载
        $this->xmlrpcs->initialize($config);
        // 启动服务
        $this->xmlrpcs->serve();
    }
    
    public function process($request)
    {
        // 获取请求参数
        $parameters = $request->output_parameters();

        // 响应数据
        $response = array(
            array(
                'you_said'  => $parameters[0],
                'i_respond' => 'Not bad at all.'
            ),
            'struct'
        );
        // 返回响应数据
        return $this->xmlrpc->send_response($response);
    }
}
  • 客户端 application/controllers/Xmlrpc_client.php
class  Xmlrpc_client extends CI_Controller
{
    public function index()
    {
        // 加载辅助函数 url
        $this->load->helper('url');
        // 设置服务端站点(即服务端类名 xmlrpc_server)
        $server_url = site_url('xmlrpc_server');

        // 加载辅助 xmlrpc 模型
        $this->load->library('xmlrpc');

        // 设置访问服务器的 url 及端口
        $this->xmlrpc->server($server_url, 80);
        // 设置访问服务器方法
        $this->xmlrpc->method('Greetings');

        // 设置请求参数,发送请求
        $request = array('How is it going?');
        $this->xmlrpc->request($request);

        if ( ! $this->xmlrpc->send_request())
        {
            // 请求发送错误
            echo $this->xmlrpc->display_error();
        }
        else
        {
            echo '<pre>';
            // 获取响应数据
            print_r($this->xmlrpc->display_response());
            /*
                Array
                (
                    [you_said] => How is it going?
                    [i_respond] => Not bad at all.
                )
            */
            echo '</pre>';
        }
    }
}

访问:http://localhost/xmlrpc_client.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海面有风

您的鼓励将是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值