xmlrpclibを使用して、すべてのメソッドにclient_addressを公開するには?

StackOverflow https://stackoverflow.com/questions/978784

  •  13-09-2019
  •  | 
  •  

質問

私は、クライアントのIPチェックのために少しのSimpleXMLRPCServerを作成します。

私はこれを試してみます:

サーバー

輸入xmlrpclib

のSimpleXMLRPCServer輸入のSimpleXMLRPCServerから

サーバのSimpleXMLRPCServer =(( "localhost" を、8000))

DEF MYIP():     "あなたのIPがある:%sの" 戻る%のserver.socket.getpeername()

server.register_function(MYIP)

server.serve_forever()

クライアント

輸入xmlrpclib

SE = xmlrpclib.Server( "ます。http:// localhostを:8000 の")

印刷se.MyIp()

エラー

xmlrpclib.Fault::(107は、 'トランスポートエンドポイントが接続されていません') ">

すべての機能にclient_address見えるようにどのように?

役に立ちましたか?

解決

あなたはすべての関数の最初の引数としてclient_addressを渡すために、たとえばたい場合は、

、あなたはのparamsタプルに_dispatchを付加して、委任する(SimpleXMLRPCRequestHandlerをサブクラス(あなたがのSimpleXMLRPCServerをインスタンス化する際ハンドラとして、あなたのサブクラスを渡す)とself.client_addressをオーバーライドすることができますSimpleXMLRPCRequestHandler._dispatchする残りの部分)。このアプローチはOKですし、コードを見たい場合は、ちょうど頼む!

私はあなたが安全に「client_addressが見えるよう」する関数の引数以外のものを使用したいかどうかはわかりません - グローバル、裸の名前など一切client_addressありませんか、そうでない場合は、要求ハンドラの各インスタンスのちょうどself.client_addressがありますます。

- クラス(およびスレッドの下で安全ではない、などなど、このようなグローバル変数にコピーするなどし、ハックは、の本当にの本当に気持ち悪い感じ)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top