首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python SimpleXMLRPCServer:获取用户IP和简单鉴权

Python SimpleXMLRPCServer:获取用户IP和简单鉴权
EN

Stack Overflow用户
提问于 2012-05-25 00:56:16
回答 1查看 2.3K关注 0票数 2

我正在尝试用Python创建一个非常简单的XML RPC Server,它提供基本的身份验证和获取连接用户的IP的能力。让我们以http://docs.python.org/library/xmlrpclib.html中提供的示例为例:

代码语言:javascript
复制
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,将其集成到其中可能会更简单。

你认为如何?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-05 21:46:32

这是一个相关的问题,我发现它很有帮助:

IP address of client in Python SimpleXMLRPCServer?

对我来说起作用的是在服务器的一个被覆盖的finish_request方法中获取client_address,将它存储在服务器本身中,然后在一个被覆盖的服务器_dispatch例程中访问它。您也可以从方法内部访问服务器本身,但我只是尝试将IP地址作为自动的第一个参数添加到所有方法调用中。我使用字典的原因是因为我还将添加一个会话令牌,也许还会添加其他元数据。

代码语言:javascript
复制
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()这样的自省函数,因为它不需要额外的参数。一个想法是检查“system”的方法名。在这种情况下,只需传递常规参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10741992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档