Maison php教程 php手册 PHP-WebService的最常用的两种方法

PHP-WebService的最常用的两种方法

Jun 21, 2016 am 08:57 AM

Ping Service,博客程序提供一种通知机制,以便在第一时间将博客的更新信息发布到提供Ping Service服务的网站,写聚合的时候研究了一下

Ping Service,博客程序提供一种通知机制,以便在第一时间将博客的更新信息发布到提供Ping Service服务的网站,写聚合的时候研究了一下

先看 标准 吧

这是一个标准的Ping Service,用XMLRPC来传数据的,注释写的这么详细,代码说明就不需要了吧,PHP5开启XMLRPC方法

client.php

$host  = 'zxsv';
$port  = 80;
$rpc_server = '/test/xmlrpc_server.php';
$title = 'zxsv';
$server = 'http://zxsv/test/';
$rss = 'http://zxsv/test/rss.php';
//weblogUpdates.Ping方法
$Ping = xmlrpc_encode_request('weblogUpdates.Ping', array($title, $server ));
//weblogUpdates.extendedPing方法
$extendedPing = xmlrpc_encode_request('weblogUpdates.extendedPing', array($title, $server, $rss ));
//调用rpc_client_call函数把所有请求发送给XML-RPC服务器端后获取信息
$response = rpc_client_call($host, $port, $rpc_server, $Ping);
$split = '';
$xml =  explode($split, $response);
$xml = $split . array_pop($xml);
$response = xmlrpc_decode($xml);
//输出从RPC服务器端获取的信息
print_r($response);
/**
* 函数:提供给客户端进行连接XML-RPC服务器端的函数
* 参数:
* $host  需要连接的主机
* $port  连接主机的端口
* $rpc_server XML-RPC服务器端文件
* $request  封装的XML请求信息
* 返回:连接成功成功返回由服务器端返回的XML信息,失败返回false
*/
function rpc_client_call($host, $port, $rpc_server, $request) {
   $fp = fsockopen($host, $port);
   $query = "POST $rpc_server HTTP/1.0\nUser_Agent: XML-RPC Client\nHost: ".$host."\nContent-Type: text/xml\nContent-Length: ".strlen($request)."\n\n".$request."\n";
   if (!fputs($fp, $query, strlen($query))) {
       $errstr = "Write error";
       return false;
   }
   $contents = '';
   while (!feof($fp)){
       $contents .= fgets($fp);
   }
   fclose($fp);
   return $contents;
}
?>

server.php

/**
* 函数:提供给RPC客户端调用的函数
* 参数:
* $method 客户端需要调用的函数
* $params 客户端需要调用的函数的参数数组
* 返回:返回指定调用结果
*/
function rpc_server_extendedping($method, $params) {
    $title = $params[0];
    $server = $params[1];
    $rss = $params[2];
        //中间的判断,成功返回$XML_RPC_String
    $XML_RPC_String = array('flerror'=>false,'message'=>'Thanks for the ping.');
  return $XML_RPC_String;
}
function rpc_server_ping($method, $params) {
    $title = $params[0];
    $server = $params[1];
        //中间的判断,成功返回$XML_RPC_String
    $XML_RPC_String = array('flerror'=>false,'message'=>'Thanks for the ping.');
  return $XML_RPC_String;
}
//产生一个XML-RPC的服务器端
$xmlrpc_server = xmlrpc_server_create();
//注册一个服务器端调用的方法rpc_server,实际指向的是rpc_server_extendedping函数
xmlrpc_server_register_method($xmlrpc_server, "weblogUpdates.extendedPing", "rpc_server_extendedping");
xmlrpc_server_register_method($xmlrpc_server, "weblogUpdates.Ping", "rpc_server_ping");
//接受客户端POST过来的XML数据
$request = $HTTP_RAW_POST_DATA;
//print_r($request);
//执行调用客户端的XML请求后获取执行结果
$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);
//把函数处理后的结果XML进行输出
header('Content-Type: text/xml');
echo $xmlrpc_response;
//销毁XML-RPC服务器端资源
xmlrpc_server_destroy($xmlrpc_server);
?>

类写的,有BUG

class Pings {
    public $xmlrpc_server;
    public $xmlrpc_response;
    public $methodName;   
    public function __construct() {
        //产生一个XML-RPC的服务器端
        $this->xmlrpc_server = xmlrpc_server_create ();
        $this->run ();
    }
   
    //注册一个服务器端调用的方法rpc_server,实际指向的是ping函数
    public function rpc_server() {       
        $this->methodName = !$this->methodName ? 'weblogUpdates.extendedPing':'weblogUpdates.Ping';       
        xmlrpc_server_register_method ( $this->xmlrpc_server, $this->methodName, array (__CLASS__, "ping"));       
    }
        /**
     * 函数:提供给RPC客户端调用的函数
     * 参数:
     * $method 客户端需要调用的函数
     * $params 客户端需要调用的函数的参数数组
     * 返回:返回指定调用结果
     */   
    public function ping($method, $params) {
        $this->title = $params [0];
        $this->server = $params [1];
        $this->rss = $params [2];
        $this->tag = $params [3];
        //$a  = $this->title ? $this->update():'';
        $string = array ('flerror' => false, 'message' => 'Thanks for the ping.', 'legal' => "You agree that use of the blueidea.com ping service is governed by the Terms of Use found at www.blueidea.com." );
        return $string;
    }
   
    public function update(){
        echo '这里放更新的一些条件';
    }
       
    public function run() {   
        $this->rpc_server ();   
        $request = isset ( $GLOBALS ["HTTP_RAW_POST_DATA"] ) ? file_get_contents ( "php://input" ) : $GLOBALS ["HTTP_RAW_POST_DATA"];       
        $this->xmlrpc_response = xmlrpc_server_call_method ( $this->xmlrpc_server, $request, null );
        //把函数处理后的结果XML进行输出
        header ( 'Content-Type: text/xml' );
        echo $this->xmlrpc_response;
    }
   
    //销毁XML-RPC服务器端资源
    public function __destruct() {
        xmlrpc_server_destroy ( $this->xmlrpc_server );
    }
}
$Obj = new Pings ( );
?>

WebService的最常用的两种方法算是写齐了



Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)