xmlrpclibを使用して、すべてのメソッドにclient_addressを公開するには?
質問
私は、クライアントの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
がありますます。