搜尋
首頁php教程php手册PHP-WebService的最常用的两种方法

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的最常用的两种方法算是写齐了



陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具