2

基本認証と接続ユーザーのIPを取得する機能を提供するPythonを使用して、非常に単純なXML RPCサーバーを作成しようとしています。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 ステートメントでテストすることをユーザーに強制することです。

2 つ目は、関数を呼び出したときにユーザー IP を取得するか、サーバーに接続した後に保存できるようにすることです。

さらに、私はすでに Apache サーバーを実行しており、これをそれに統合する方が簡単かもしれません。

どう思いますか?

4

1 に答える 1

0

これは、私が役立つと思った関連する質問です。

Python SimpleXMLRPCServerのクライアントのIPアドレス?

私にとってうまくいったのは、サーバーのオーバーライドされたfinish_requestメソッドでclient_addressを取得し、サーバー自体に隠してから、オーバーライドされたserver _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() のようなイントロスペクション関数を壊すことに注意してください。「システム」のメソッド名を確認するのも 1 つの考えです。その場合は、通常のパラメーターを渡すだけです。

于 2012-06-05T13:46:31.890 に答える