2010-07-11 28 views
2

J'écris un simple programme xmlrpc en python. quelque chose comme ce qui suit:Comment puis-je obtenir l'adresse IP de la requête dans une fonction regested de python xmlrpc server

 

def foo(data): 

    # I want get the calling client's IP address here... How can I ? 

server=SimpleXMLRPCServer.SimpleXMLRPCServer((host, port)) 
server.register_function(foo) 

server.handle_request() 

Comme on peut le voir dans ce qui précède, je veux obtenir l'adresse IP du client dans la fonction registed « foo », comment puis-je?

Répondre

1

Vous pouvez le faire en sous-classant le serveur (et éventuellement le gestionnaire). E.g .:

class MyXMLRPCServer(SimpleXMLRPCServer.SimpleXMLRPCServer): 
    def process_request(self, request, client_address): 
     self.client_address = client_address 
     return SimpleXMLRPCServer.SimpleXMLRPCServer.process_request(
      self, request, client_address) 

server=SimpleXMLRPCServer.MyXMLRPCServer((host, port)) 

Maintenant, server.client_address vous donne les données désirées. Notez que ce codage direct et court ne fonctionne que pour le cas monothread (que vous utilisez de toute façon en choisissant le serveur simple dans votre code) - le besoin de travailler avec le gestionnaire vient si vous voulez aller multi-thread .

+0

merci Alex. Mais comment puis-je accéder à l'instance varible "client_address" dans la fonction registed "foo"? –

+0

@john, 'server.client_address', bien sûr - l'instance s'appelle' server', donc on accède à ses variables d'instance par 'server.whatever'. –