Echanges XMLRPC

Tagged:

XMLRPC c'est un nom barbar pour désigner un principe qui une fois maitrisé est vraiment utile ... sisi ije vous jure ;)

En fait le but de xmlrpc est de faire des appels de procédure distante ... C'est a dire que vous instanciez une classe avec ses méthodes sur le serveur, et vous faites appel a ses methodes sur le client. Les transferts de données sont effectués en XML d'où le nom...

Pour faire la même chose il existe également SOAP qui apparament possède plein de fonctionalitées étranges, DCOM, et CORBA (le dernier permet de développer des applications distribuées, et n'a pas l'air mal du tout ... je vais m'y attarder un peu plus dans les prochains temps ...)

Voici un excellent site sur le XMLRPC qui parle de XMLRPC en général et qui contient une mine d'informations !!!

Perso j'ai mis un peu de temps avant d'avoir quelque chose qui fonctionne avec SimpleXMLRPCServer et la xmlrpclib alors je vous en fait part :

Le serveur :

#!/usr/bin/env python
 
from SimpleXMLRPCServer import SimpleXMLRPCServer
import socket
 
accessList=(
    '127.0.0.1',
    '192.168.0.4'
    )
 
class Server(SimpleXMLRPCServer):
    def __init__(self,addr,port):
        SimpleXMLRPCServer.__init__(self,(addr,port))
 
    def server_bind(self):
        self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        SimpleXMLRPCServer.server_bind(self)
 
    def verify_request(self,request, client_address):
        if client_address[0] in accessList:
            return 1
        else:
            return 0
 
class TestClass:
    def echo(self, data):
        return data
    def conc(self, p1, p2):
        return p1 + ' >> ' + p2
 
s = TestClass()
 
server = Server('',8000)
server.register_instance(s)
 
print "Starting server"
server.serve_forever()

Le client (interprété directement pour l'instant ;)):

$> python
Python 2.4.1+ (#2, Sep 17 2005, 00:18:43)
[GCC 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from xmlrpclib import Server
>>> s = Server('http://192.168.0.2:8000')
>>> s.echo('test')
'test'
>>> s.conc('another','test')
'another >> test'

[Edit 1/1/2006]
J'ai changé un lien et donc le texte associé a ce lien puisque j'ai remarqué que le lien était mort !!!

Comments

Bonjour,
je suis interessé par votre code: je dois faire un serveur xmp-rpc en python pour recevoir puis envoyer des paquets d'informations.
Par contre je ne suis pas tres bon en programmation. Pourriez vous m'expliquer d'une part ce que fait exactement votre code, et d'autre part serait-il possible que vous mettiez des commentaires???
Merci d'avance pour votre aide.
Nicolas

'lu ;)
Le code présenté ici est un serveur xml-rpc ... J'y ai pas mis de commentaires parce que les fonctions portent le nom de ce qu'elles font ... il y a 3 lignes par fonction !
Si tu dois faire un serveur xml-rpc avec client et tout ce qui va bien et que tu luttes pour le code la tu n'as pas terminé ;) mais heureusement de ce coté ya de la doc pour XML et de la doc pour python !!!
La classe que j'ai faite n'est rien de plus qu'un SimplXMLRPCServer auquel j'ai ajouté une fonctionalité de vérification de l'IP entrante ! histoire de sécuriser un peu mais on est loin de quelque chose de complètement sécurisé ...
Bon courrage ;)

Je n'arrive pas à faire fonctionner le client javascript vcXMLRPC.js

j'ai fait le serveur toutpasse sauf la derniere ligne , est ce normal, serveur en ecoute !!
apres cette ligne:
server.serve_forever()

le client provoque cette erreur:
Traceback (most recent call last):
File "<string>", line 74, in run_nodebug
File "C:\Documents and Settings\HP_Administrateur\Bureau\serveur XML_RPC\client_XmlRpc.py", line 6, in ?
s.echo('test')
File "C:\Python24\lib\xmlrpclib.py", line 1096, in __call__
return self.__send(self.__name, args)
File "C:\Python24\lib\xmlrpclib.py", line 1383, in __request
verbose=self.__verbose
File "C:\Python24\lib\xmlrpclib.py", line 1129, in request
self.send_content(h, request_body)
File "C:\Python24\lib\xmlrpclib.py", line 1243, in send_content
connection.endheaders()
File "C:\Python24\lib\httplib.py", line 798, in endheaders
self._send_output()
File "C:\Python24\lib\httplib.py", line 679, in _send_output
self.send(msg)
File "C:\Python24\lib\httplib.py", line 646, in send
self.connect()
File "C:\Python24\lib\httplib.py", line 630, in connect
raise socket.error, msg
socket.error: (10060, 'Operation timed out')
du help § please
merci

j'ai fait le serveur toutpasse sauf la derniere ligne , est ce normal, serveur en ecoute !!
apres cette ligne:
server.serve_forever()

le client provoque cette erreur:
Traceback (most recent call last):
File "<string>", line 74, in run_nodebug
File "C:\Documents and Settings\HP_Administrateur\Bureau\serveur XML_RPC\client_XmlRpc.py", line 6, in ?
s.echo('test')
File "C:\Python24\lib\xmlrpclib.py", line 1096, in __call__
return self.__send(self.__name, args)
File "C:\Python24\lib\xmlrpclib.py", line 1383, in __request
verbose=self.__verbose
File "C:\Python24\lib\xmlrpclib.py", line 1129, in request
self.send_content(h, request_body)
File "C:\Python24\lib\xmlrpclib.py", line 1243, in send_content
connection.endheaders()
File "C:\Python24\lib\httplib.py", line 798, in endheaders
self._send_output()
File "C:\Python24\lib\httplib.py", line 679, in _send_output
self.send(msg)
File "C:\Python24\lib\httplib.py", line 646, in send
self.connect()
File "C:\Python24\lib\httplib.py", line 630, in connect
raise socket.error, msg
socket.error: (10060, 'Operation timed out')
du help § please
merci

bjr je dois coder un client serveur sous linux via rpc mais je suis tres peu familliariser avec le rpc donc si vous avez des exemple ou autres je suis preneur merci d'avance...