Python与PHP通过XMLRPC进行通信
Python与PHP通过XMLRPC进行通信:服务器端用Python,客户端用PHP。
服务器端:xmlrpc_server.py
#!/usr/bin/python
# coding: UTF-8
from SimpleXMLRPCServer import SimpleXMLRPCServer
from SocketServer import ThreadingMixIn
class ThreadXMLRPCServer(ThreadingMixIn, SimpleXMLRPCServer):pass #定义自己的CMS类
class MyCMS:
def echoString(self, strs):
s = u'From Python - '
return s + strs
def sayHello(self):
return "hello xmlprc" #创建实例
cms = MyCMS()
server = ThreadXMLRPCServer(("localhost", 8888), allow_none=True) #注册
server.register_instance(cms) #服务器执行,并监听此端口
print "Listening on port 8888"
server.serve_forever()
客户端:xmlrpc_client.php
<?php
//XML-RPC客户端演示程序 ///require('libphpxmlrpc/xmlrpc.inc');
include('libphpxmlrpc/xmlrpc.inc'); $xmlrpc_internalencoding = 'UTF-8'; //创建client对象, 三个参数依次为 path, hostname, port
$client=new xmlrpc_client('/', 'localhost', 8888); //create xmlrpcval object, which allows the encoding of our variable
//创建xmlrpcval对象,将我们的PHP变量编码为XML-RPC需要的XML形式
$inputString = php_xmlrpc_encode('Hello World'); //create an array of parameters
//尽管我们只有一个参数,但仍然要转换成数组的形式,因为xmlrpcmsg的第二个参数是一个参数表
$parameters=array($inputString); //create the message object
//创建XML-RPC报文,参数分别为 远程方法名 和 参数表
$msg=new xmlrpcmsg('echoString', $parameters);
///$msg=new xmlrpcmsg('sayHello'); //$client->request_charset_encoding = 'utf-8'; //send the message, get the response
//发送报文,返回值$rsp为一个xmlrpcresp对象,它包含以下三个方法:
// faultCode() 出错代码,如果成功将返回0
// faultString() 出错信息
// value() 返回值,以xmlrpcval对象形式存在,PHP使用前需要进行解码
$client->debug = true;
$rsp=$client->send($msg); //check for errors
if($rsp->faultcode()==0)
{
//decode the response to a PHP type
//xmlrpc_decode()函数用于将xmlrpcval对象解码
$response=php_xmlrpc_decode($rsp->value()); //print results
print '<pre>';
var_dump($response);
///echo $response;
print '</pre>';
}
else
{
//print errors
print 'Error: '.$rsp->faultcode().', '.$rsp->faultstring().'<br>';
} //show messages
//查看一下报文内容
/*$msg->createpayload();
print 'REQUEST:<xmp>'.$msg->payload.'</xmp>';
print 'RESPONSE:<xmp>'.$rsp->serialize().'</xmp>';*/
?>
Python与PHP通过XMLRPC进行通信的更多相关文章
- The Python web services developer: XML-RPC for Python
原文地址:http://www.ibm.com/developerworks/webservices/library/ws-pyth10/index.html 摘要:概括地说,您可以将 XML-RPC ...
- Python并发编程之线程消息通信机制任务协调(四)
大家好,并发编程 进入第四篇. 本文目录 前言 Event事件 Condition Queue队列 总结 . 前言 前面我已经向大家介绍了,如何使用创建线程,启动线程.相信大家都会有这样一个想法,线程 ...
- Python进阶----UDP协议使用socket通信,socketserver模块实现并发
Python进阶----UDP协议使用socket通信,socketserver模块实现并发 一丶基于UDP协议的socket 实现UDP协议传输数据 代码如下:
- Python基于socket模块实现UDP通信功能示例
Python基于socket模块实现UDP通信功能示例 本文实例讲述了Python基于socket模块实现UDP通信功能.分享给大家供大家参考,具体如下: 一 代码 1.接收端 import ...
- Python的招牌菜xmlrpc
一.简单介绍 为了解决在系统的80port提供RPC的服务.而又不影响正在运行的WEB服务.人们想出了用HTTP协议传输RPC包的办法.对于差点儿是专门用于传输文本的HTTP协议.要在其上传输RPC封 ...
- python MultiProcessing标准库使用Queue通信的注意要点
今天原本想研究下MultiProcessing标准库下的进程间通信,根据 MultiProcessing官网 给的提示,有两种方法能够来实现进程间的通信,分别是pipe和queue.因为看queue顺 ...
- python下基于sokcet的tcp通信——入门篇
环境 python版本:2.7 IDE:pycharm TCP/UDP协议均为传输层的协议,绝大部分应用程序之间的通信都是使用TCP或UDP,故而在网络通信中及其重要,想详细了解他们之间的差异,可参考 ...
- linux 下 rpc python 实例之使用XML-RPC进行远程文件共享
这是个不错的练习,使用python开发P2P程序,或许通过这个我们可以自己搞出来一个P2P下载工具,类似于迅雷.XML-RPC是一个远程过程调用(remote procedure call,RPC)的 ...
- Python的扩展接口[1] -> 串口通信
串口通信 / Serial Communication 1 串口简介 / Serial Introduction 串行接口(Serial Interface)简称串口,通常为COM接口,数据发送方式为 ...
随机推荐
- BackTrack5-r3系统软件更新
所需文件包地址:http://pan.baidu.com/s/1i3ouc9v(64位更新包) 进入BT系统图形模式-打开BT终端输入:apt-get update 按回车//更新软件目录 软件更新将 ...
- PHP 爬取网页中表格数据
public function spider_j($page) { $url="http://aaa/bbb".$page."_0/"; $fcontents= ...
- android 数据下载 工具类
传入图片地址,获得服务器返回的流. 把流转化为byte[]数组
- display:inline; display:block;
block(块级元素): div .from. p .table. pre.h1~h6. dl .ol .ul等 inline(内联元素): span.a.strong.em.label.input. ...
- Atom 安装 Packages 的笨办法
在终端里输入下面的命令打开 Atom 的 packages 的安装目录. open ~/.atom/packages 然后找到需要安装的 Atom packages ,比如我需要安装的这个 atom- ...
- JS识别ios & 安卓
var isAndroid = navigator.userAgent.indexOf('Android') > -1 || navigator.userAgent.indexOf('Adr') ...
- android颜色指列表
<?xml version="1.0" encoding="utf-8" ?> 2 <resources> 3 <color na ...
- linux常用vi命令
1:vi +n filename :打开文件,并将光标置于第n行首 2:在底行模式下,输入:set nu显示行号3:将光标移动到248行,命令:248G,即在命令行模式下输入248shitf+g4:复 ...
- Android之ListView&ViewPager模拟新闻界面
模拟新闻 APP 的界面 1)写 ListView 之前先写布局: 这里有两种 Item 的布局: <?xml version="1.0" encoding="ut ...
- 特殊字符转义&时间格式化&获取URL参数
/*特殊字符转义*/ function htmlspecialchars (str) { var str = str.toString().replace(/&/g, "&& ...