Serveur Python XMLRPC multithreadé

But:

Le but premier était exécuter des commandes bash depuis une page web. Ceci est très simple en passant par PHP et son lot de commandes système style exec();. Mais ces commandes sont désactivée par le SAFE_MODE de PHP. Reste encore la possibilité exécuter des CGI si la configuration d’apache le permet.
Bref, un serveur XML-RPC répondait à ces attentes.
Mise en œuvre:

Le fichier server.py

import SocketServer
from SimpleXMLRPCServer import SimpleXMLRPCServer,SimpleXMLRPCRequestHandler
import sys
import os

# Threaded mix-in
class AsyncXMLRPCServer(SocketServer.ThreadingMixIn,SimpleXMLRPCServer) :
pass

# Example class to be published
class TestObject:
def sysReq(self,data):
return os.system(data)
def pow(self, x, y):
return pow(x, y)
def add(self, x, y) :
return x + y
def divide(self, x, y):
return float(x) / float(y)

# Instantiate and bind to localhost:8080
server = AsyncXMLRPCServer(('localhost', 8080), SimpleXMLRPCRequestHandler)

# Register example object instance
server.register_instance(TestObject())
server.register_introspection_functions()
# run!
server.serve_forever()

Démarrage du serveur:

user@host: python server.py

Le fichier client.py

import xmlrpclib
import sys

s = xmlrpclib.ServerProxy('http://localhost:8080')

print s.pow(2,3) # Returns 2**3 = 8
print s.add(2,3) # Returns 5
print s.div(5,2) # Returns 5//2 = 2

# Print list of available methods
print s.system.listMethods()

print s.sysReq(sys.argv[1])

Ressources:

Please like & share:

Laisser un commentaire