はじめに
試験勉強です。
XML-RPC については、マニュアルがとても心細いので勉強するのもたいへんです。
こちら と こちら を参考に、できるだけ簡単なスニペットにしてみました。
XML-RPC サーバー側プログラムの簡単な例。
<?php // 参考:http://www.java-samples.com/showtutorial.php?tutorialid=1186 function lifecycle($method, $params) { switch($params[0]) { case 'egg': $reply = 'All eggs will be birds one day.'; break; default: $reply = 'That must have been an otheregg'; } return $reply; } $server = xmlrpc_server_create(); xmlrpc_server_register_method( $server, "cycle" /* 外部に公開するメソッド名 */, "lifecycle" /* 公開する実際のメソッド名称 */ ); $request = file_get_contents("php://input"); $method = null; // {{ $dbg = xmlrpc_decode_request($request, $method); $desc = xmlrpc_parse_method_descriptions($request); // }} $response = xmlrpc_server_call_method($server, $request, null); header('Content-Type: text/xml'); print ($response); xmlrpc_server_destroy($server);
XML-RPC クライアント側プログラムの簡単な例。
<?php // 参考:https://gist.github.com/quietshu/8fd50b1f732b87025762 function do_call($host, $port, $uri, $request) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://$host:$port/$uri"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $request); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $curl_errorno = curl_errno($ch); $curl_error = curl_error($ch); curl_close($ch); // curl のエラーを確認する if ($curl_errorno != 0) { die("Curl Error: $curl_errorno - $curl_error\n"); } // サーバーからのエラーを確認する if ($response_code != 200) { die("ERROR: non-200 response from server: $response_code - $response\n"); } $decoded = xmlrpc_decode($response); // XMLRPC のエラーを確認する if (is_array($decoded) && xmlrpc_is_fault($decoded)) { die("FAULT: {$decoded['faultString']} - {$decoded['faultCode']}"); } return $decoded; } // $host = 'www.example.com'; $port = 80; $uri = '/path/to/xmlrpcsv.php'; $request = xmlrpc_encode_request('cycle', 'egg'); $response = do_call($host, $port, $uri, $request); var_dump($response);
関連するマニュアル
使用した関数
サーバー側
- xmlrpc_decode_request
- xmlrpc_parse_method_descriptions
- xmlrpc_server_call_method
- xmlrpc_server_create
- xmlrpc_server_destroy
- xmlrpc_server_register_method