我有一個SimpleXMLRPCServer服務器(Python)。Python中SimpleXMLRPCServer客戶端的IP地址?
如何在請求處理程序中獲取客戶端的IP地址?
此信息出現在日誌中。但是,我不確定如何從請求處理程序中訪問這些信息。
我有一個SimpleXMLRPCServer服務器(Python)。Python中SimpleXMLRPCServer客戶端的IP地址?
如何在請求處理程序中獲取客戶端的IP地址?
此信息出現在日誌中。但是,我不確定如何從請求處理程序中訪問這些信息。
正如Michael指出的那樣,您可以從請求處理程序中獲取client_address
。例如,您可以覆蓋從BaseRequestHandler
間接繼承的__init__
函數。到IP地址傳遞給請求的方法
class RequestHandler(SimpleXMLRPCRequestHandler):
def __init__(self, request, client_address, server):
print client_address # do what you need to do with client_address here
SimpleXMLRPCRequestHandler.__init__(self, request, client_address, server)
請求處理程序本身應該有一個屬性client_address
(從BaseHTTPRequestHandler
繼承)。從BaseHTTPRequestHandler:
包含形式爲
(host, port)
的元組引用客戶的地址。
的一種方法是重寫RequestHandler.decode_request_content。
decode_request_content返回一個XML字符串。 例子:
<?xml version='1.0'?>
<methodCall>
<methodName>get_workunit</methodName>
<params>
<param>
<value><int>1</int></value>
</param>
<param>
<value><string>Windows</string></value>
</param>
<param>
<value><string>32bit</string></value>
</param>
</params>
</methodCall>
只需把另一個參數在裏面。
class HackyRequestHandler(SimpleXMLRPCRequestHandler):
def __init__(self, req, addr, server):
self.client_ip, self.client_port = addr
SimpleXMLRPCRequestHandler.__init__(self, req, addr, server)
def decode_request_content(self, data):
data = SimpleXMLRPCRequestHandler.decode_request_content(self, data)
from xml.dom.minidom import parseString
doc = parseString(data)
ps = doc.getElementsByTagName('params')[0]
pdoc = parseString(
''' <param><value>
<string>%s</string>
</value></param>''' % (self.client_ip,))
p = pdoc.firstChild.cloneNode(True)
ps.insertBefore(p, ps.firstChild)
return doc.toxml()
並相應地更新您的方法簽名。
如何從請求方法本身訪問RequestHandler?沒有自我參數。 – 2010-01-24 23:55:31