Comment exposer adresse_client à toutes les méthodes, en utilisant xmlrpclib?
Question
Je crée peu SimpleXMLRPCServer pour le contrôle IP du client.
J'essaie ceci:
Serveur
xmlrpclib import
de SimpleXMLRPCServer importation SimpleXMLRPCServer
server = SimpleXMLRPCServer (( "localhost", 8000))
def MyIP (): retour "Votre ip est:% s" % de server.socket.getpeername ()
server.register_function (MyIP)
server.serve_forever ()
Client
xmlrpclib import
= se xmlrpclib.Server ( " http: // localhost: 8000 ")
print se.MyIp ()
Erreur
xmlrpclib.Fault:: (107, 'point final Transport est pas connecté') ">
Comment faire adresse_client visible à toutes les fonctions?
La solution
Si vous voulez par exemple passer client_address
comme premier argument à toutes les fonctions, vous pouvez sous-classe SimpleXMLRPCRequestHandler (passer votre sous-classe comme gestionnaire lorsque vous instancier SimpleXMLRPCServer) et passer outre _dispatch
(à préfixer self.client_address
au tuple params puis déléguer la repos à SimpleXMLRPCRequestHandler._dispatch
). Si cette approche est OK et que vous voulez voir le code, il suffit de demander!
Je ne sais pas comment vous en toute sécurité utiliser autre chose que les arguments de la fonction de « rendre client_address
visible » - il n'y a pas client_address
comme un seul nom, global ou non, il y a juste la self.client_address
de chaque instance du gestionnaire de requêtes classe (et hacks tels que la copie à une des variables globales se sentent vraiment dégueu en effet - et dangereux sous filetage, etc etc).