2010-07-11 26 views
2

我正在用python寫一個簡單的xmlrpc程序。類似如下:我怎樣才能獲得請求的IP地址在python xmlrpc服務器的內存函數中

 

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

正如可以在上面可以看到,我想在臨時會員功能「foo」的客戶端IP地址,我怎麼可以?

回答

1

您可以通過繼承服務器(也可能是處理程序)來完成此操作。例如:

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

現在server.client_address爲您提供了所需的數據。請注意,這種直接的,短的編碼只適用於單線程的情況下(您通過在代碼中選擇簡單的服務器來使用它) - 如果您想要使用多線程,需要使用處理程序。

+0

謝謝亞歷克斯。但是,如何訪問已註冊函數「foo」中的實例變量「client_address」? – 2010-07-13 10:20:59

+0

@john,'server.client_address',當然 - 實例名爲'server',所以它的實例變量作爲'server.whatever'來訪問。 – 2010-07-13 14:05:02

相關問題