使用Python远程调用RPC模块xmlrpclib
的方法,可以通过以下步骤完成。
步骤一:开启服务端
在服务器上创建一个Python脚本,作为服务端的脚本,使用SimpleXMLRPCServer
模块开启服务监听,如下所示:
from SimpleXMLRPCServer import SimpleXMLRPCServer
import os
def get_system_info():
'''获取系统信息'''
uname = os.uname()
return dict(
os=uname[0],
hostname=uname[1],
release=uname[2],
version=uname[3],
arch=uname[4]
)
server = SimpleXMLRPCServer(('localhost', 8000))
server.register_function(get_system_info, 'get_system_info')
print 'Start server...'
server.serve_forever()
在上面的例子中,get_system_info
方法用于获取系统的基础信息,SimpleXMLRPCServer
模块用于开启一个拉起一个服务,监听端口为8000。
步骤二:创建客户端
在另一个Python脚本中,作为客户端的脚本,使用xmlrpclib
模块创建一个远程调用对象,调用服务器端的方法,如下所示:
import xmlrpclib
proxy = xmlrpclib.ServerProxy("http://localhost:8000/")
info = proxy.get_system_info()
print(info)
在上面的例子中,ServerProxy
方法用于创建一个代理对象,代理服务器端的方法。info
变量保存了服务器返回的结果。
示例一:获取系统基本信息
下面是一个完整的示例,展示客户端如何通过调用服务端的get_system_info
方法获取系统的基本信息:
Server端代码(system_info_server.py)
from SimpleXMLRPCServer import SimpleXMLRPCServer
import os
def get_system_info():
'''获取系统信息'''
uname = os.uname()
return dict(
os=uname[0],
hostname=uname[1],
release=uname[2],
version=uname[3],
arch=uname[4]
)
server = SimpleXMLRPCServer(('localhost', 8000))
server.register_function(get_system_info, 'get_system_info')
print 'Start server...'
server.serve_forever()
Client端代码(system_info_client.py)
import xmlrpclib
proxy = xmlrpclib.ServerProxy("http://localhost:8000/")
info = proxy.get_system_info()
print(info)
示例二:文本加密
下面是一个完整的示例,展示客户端为字符串进行加密,并把加密后的字符串发送到服务器进行解密:
Server端代码(text_encrypt_server.py)
from SimpleXMLRPCServer import SimpleXMLRPCServer
from Crypto.Cipher import AES
import base64
key = '1234567890123456'
iv = 'abcdefghijklmnop'
cipher = AES.new(key, AES.MODE_CBC, iv)
def encrypt_str(text):
'''将字符串加密'''
pad = lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16)
text = pad(text)
msg = base64.b64encode(cipher.encrypt(text))
return msg
def decrypt_str(msg):
'''解密字符串'''
unpad = lambda s : s[0:-ord(s[-1])]
text = unpad(cipher.decrypt(base64.b64decode(msg)))
return text
server = SimpleXMLRPCServer(('localhost', 8000))
server.register_function(encrypt_str, 'encrypt')
server.register_function(decrypt_str, 'decrypt')
print 'Start server...'
server.serve_forever()
在上述代码中,首先设置密钥key
和向量iv
,然后使用Crypto
模块中的AES
加密和解密text
,最后通过ServerProxy
注册加密和解密函数。
Client端代码(text_encrypt_client.py)
import xmlrpclib
proxy = xmlrpclib.ServerProxy("http://localhost:8000/")
text = raw_input('Please input your text: ')
encrypted_text = proxy.encrypt(text)
print('加密后的字符串为:' + encrypted_text)
decrypted_text = proxy.decrypt(encrypted_text)
print('解密后的字符串为:' + decrypted_text)
在上述代码中,客户端使用raw_input
函数输入需要加密的字符串,使用ServerProxy
对象调用加密函数,返回加密后的字符串。然后客户端调用服务器端的解密方法,将得到的数据输出。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python远程调用rpc模块xmlrpclib的方法 - Python技术站