codeIgniter3 学习笔记九(XML-RPC)

Posted 岁月可贵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于codeIgniter3 学习笔记九(XML-RPC)的主要内容,如果未能解决你的问题,请参考以下文章

codeIgniter3 学习笔记六(ftp)

codeIgniter3 学习笔记八(session)

codeIgniter3 学习笔记五(表单验证)

codeIgniter3 学习笔记十(数据库操作)

Codeigniter3学习笔记一(数据库Mysql操作)

深度学习笔记九:生成对抗网络GAN(基本理论)