問題タブ [simplexmlrpcserver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
6066 参照

python - Python: スレッド化された SimpleXMLRPCServers をネストするときの httplib.CannotSendRequest

SocketServer.ThreadingMixin を使用する SimpleXMLRPCServers のチェーンを使用しているときに、断続的に httplib.CannotSendRequest 例外を受け取ります。

「チェーン」とは、次のことを意味します。

xmlrpclib を使用して SimpleXMLRPCServer の関数を呼び出すクライアント スクリプトがあります。そのサーバーは、別の SimpleXMLRPCServer を呼び出します。複雑に聞こえるかもしれませんが、このアーキテクチャが選択されたのには十分な理由があり、それが可能であってはならない理由がわかりません。

  • SocketServer.ThreadingMixin を使用しない場合、この問題は発生しません (ただし、リクエストをマルチスレッドにする必要があるため、これは役に立ちません)。
  • サービスのレベルが 1 つしかない場合 (つまり、最終サーバーを直接呼び出すクライアント スクリプトのみ)、これは発生しません。

以下の簡単なテスト コードで問題を再現できました。3 つのスニペットがあります。

最終サーバー:

ミドルサーバー:

テストクライアント:

再現するには、次の手順を使用する必要があります。

  1. python finalserver.py を実行します
  2. python middleserver.py を実行します
  3. python testclient.py を実行します
  4. (3) の実行中に、python testclient.py の別のインスタンスを実行します。

かなりの頻度で (ほとんどの場合)、最初にステップ 4 を実行しようとすると、以下のエラーが発生します。興味深いことに、すぐにステップ (4) を再度実行しようとすると、エラーは発生しません。

インターネットは、この例外は、getresponse 呼び出しを介在させずに httplib.HTTPConnection.request を複数回呼び出すことによって発生する可能性があると言っているようです。ただし、インターネットでは、SimpleXMLRPCServer のコンテキストではこれについて議論されていません。httplib.CannotSendRequest の問題を解決する方向へのポインタをいただければ幸いです。

================================================== ========================================= 答え:

わかりました、私は少しばかです。私はあまりにも長い間コードを見つめていたので、目の前にある明らかな解決策を見逃していたと思います (文字通り、答えは実際の質問にあるためです)。

基本的に、CannotSendRequest は、介在する「要求」操作によって httplib.HTTPConnection が中断されたときに発生します。各 httplib.HTTPConnection.request は、.getresponse() 呼び出しと組み合わせる必要があります。そのペアリングが別の要求操作によって中断された場合、2 番目の要求は CannotSendRequest エラーを生成します。それで:

getresponse が呼び出される前に同じ接続で 2 つの要求があるため、失敗します。

それを私の質問にリンクする:

  1. このような接続が行われている 3 つのプログラムの唯一の場所は、serverproxy 呼び出しです。
  2. 問題はスレッド化中にのみ発生するため、競合状態である可能性があります。
  3. serverproxy 呼び出しが共有される唯一の場所は middleserver.py です。

その場合の解決策は、明らかに、各スレッドに独自のサーバープロキシを作成させることです。middleserver の修正版は以下のとおりで、動作します。

このバージョンでは、各スレッドが独自の xmlrpclib.serverproxy を持つことになるため、serverproxy の同じインスタンスが HTTPConnection.request を連続して 2 回以上呼び出すリスクはありません。プログラムは意図したとおりに動作します。

ご迷惑をおかけして申し訳ありません。

0 投票する
0 に答える
213 参照

jython - SimpleXMLRPCServer が機能するために Jython が必要とするものは何ですか?

SimpleXMLRPCServerの python ドキュメントの最初の例を試しました。

Python では問題なく動作しますが、jython を使用して試してみると、次のスタック トレースが表示されます。

私はJavaよりもPythonの経験が豊富なので、これを修正する方法がわかりません。システムに依存関係がありませんか、それともクラスパスをいじる必要がありますか?

編集:JythonのWebサイトのスタンドアロンバージョンでこれを再試行しましたが、機能したので、Ubuntuのインストール済みバージョンで何か壊れているようです?

0 投票する
1 に答える
4174 参照

python - Python の xmlrpc が非常に遅い: 呼び出しごとに 1 秒

Python ドキュメントの例に従って、SimpleXMLRPCServer を使用して Python で xml-rpc サーバーを構築しました。同じマシン上の Python クライアントから呼び出しています。サーバー関数の本体は、単独で非常に高速に実行されます。

しかし、xmlrpc クライアントのパフォーマンスが非常に遅く、呼び出しごとに 1 秒かかることがわかりました。(xmlrpclib を使用)

Web で見つけた高速化手法 ( getfqdn 解決をスキップする) は役に立ちませんでした。

私の接続URIは次のとおりです。

Windows 7 で Python 2.7 x64 を実行していますが、32 ビットの Python 2.7 でも同じように動作します。

0 投票する
2 に答える
6281 参照

python - PythonマルチスレッドXMLRPCサーバー(?)

基本的に、xmlrpcサーバーを別のスレッドで実行するか、他のコードと一緒に実行したいのですが、server.serve_forever()この関数の後に別のコードを実行する方法がありません。server.serve_forever()そこに永遠に走っているようです。

マルチスレッドの概念を試しましたが、それでもここではうまくいきません。基本的に、残りのコードと一緒にxmlrpcサーバーを実行したいと思います。

よろしくお願いします。

0 投票する
1 に答える
804 参照

python - Python SimpleXMLRPC サーバーに任意のコードを挿入する

python SimpleXMLRPC Serverの python docsでは、次のように言及されています。

警告 allow_dotted_names オプションを有効にすると、侵入者がモジュールのグローバル変数にアクセスできるようになり、侵入者がマシン上で任意のコードを実行できるようになる可能性があります。このオプションは、安全な閉じたネットワークでのみ使用してください。

今、私は次のコードを持つサーバーを持っています:

この脆弱性を悪用して、サーバーに任意のコードを挿入する方法を説明してください。上記のコードに脆弱性がない場合は、悪用される可能性のある例とそのクライアント コードを示してください。

0 投票する
1 に答える
5472 参照

python - XMLRPC サーバー (Python 2.7.3) の出力を取得するには?

Python Web サイトから XMLRPC サーバー/クライアントを取得しました。Windows から pow()、add()、div() などの単純なメソッドを実行すると、クライアントは結果を正しく取得します。ただし、python モジュール (PyCrypto、Paramiko) を使用して Brocade スイッチから構成情報を取得する brocade() を実行すると、文字列出力が戻り値として返されます。スイッチ コマンド)。サーバーが正しく実行され、出力が出力されることを確認しましたが、クライアントには次のようなメッセージが表示されます。

サーバーが表示されます

クライアントが brocade() の結果を取得する方法を知っていますか?

ありがとう、スパーク。

xmlrpcserver2.py

xmlrpcclient2.py

0 投票する
1 に答える
488 参照

python - SimpleXMLRPCServer から継承するクラスの __init__ で serve_forever を呼び出す

これは間違っていますか?

これらの関数はすべて宣言され、意図したとおりに機能します。これが可能かどうかはわかりません.pythonはエラーをスローしませんが、次を使用して接続できません

ProxyServer のコードは次のとおりです。

ここに私が得るエラーがあります

0 投票する
0 に答える
822 参照

python - Xml-RPC サーバー Python - マルチコール要求?

私のコードが次のようになっているとしましょう。

ここで、多数のクライアント呼び出しがあると仮定して、XML-RPC サーバーまたはクライアント要求のリスト プロセスが多数存在するかどうかを考えてみましょう (別の要求を処理するには、1 つの要求を終了する必要があります)。

Python XML-RPC サーバーを使用して、マルチコール クライアント リクエストを処理する可能性はありますか?