Comment exposer adresse_client à toutes les méthodes, en utilisant xmlrpclib?

StackOverflow https://stackoverflow.com/questions/978784

  •  13-09-2019
  •  | 
  •  

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?

Était-ce utile?

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top