[英]Python SimpleXMLRPCServer: get user IP and simple authentication
我正在尝试使用Python制作一个非常简单的XML RPC服务器,该服务器提供基本的身份验证以及获取连接的用户IP的能力。 让我们来看一下http://docs.python.org/library/xmlrpclib.html中提供的示例:
import xmlrpclib
from SimpleXMLRPCServer import SimpleXMLRPCServer
def is_even(n):
return n%2 == 0
server = SimpleXMLRPCServer(("localhost", 8000))
server.register_function(is_even, "is_even")
server.serve_forever()
因此,现在,这背后的第一个想法是让用户提供凭据并对其进行处理,然后再允许其使用功能。 我需要非常简单的身份验证,例如仅一个代码。 现在,我正在执行的是强制用户在函数调用中提供此代码,并使用if语句对其进行测试。
第二个是当用户调用函数时能够获得用户IP或在连接服务器后将其存储。
此外,我已经在运行Apache Server,将其集成到其中可能会更简单。
你怎么看?
这是一个相关的问题,我发现有帮助:
Python SimpleXMLRPCServer中客户端的IP地址?
对我而言,有效的方法是在服务器的覆盖的finish_request方法中获取client_address,将其存储在服务器本身中,然后在覆盖的服务器_dispatch例程中对其进行访问。 您也许也可以从该方法内部访问服务器本身,但是我只是试图将IP地址作为自动第一个参数添加到我的所有方法调用中。 我使用dict的原因是因为我还将添加会话令牌以及其他元数据。
from xmlrpc.server import DocXMLRPCServer
from socketserver import BaseServer
class NewXMLRPCServer( DocXMLRPCServer):
def finish_request( self, request, client_address):
self.client_address = client_address
BaseServer.finish_request( self, request, client_address)
def _dispatch( self, method, params):
metadata = { 'client_address' : self.client_address[ 0] }
newParams = ( metadata, ) + params
return DocXMLRPCServer._dispatch( self, method, metadata)
请注意,这会破坏诸如system.listMethods()之类的自省功能,因为这不需要额外的参数。 一种想法是检查“系统”的方法名称。 并在这种情况下通过常规参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.