私はこれまで一度も SOAP を使ったことがないし、私はPythonの初心者です。私は自分自身が両方の技術に精通するためにこれをやっています。 SOAPlib をインストールして、 Client のドキュメントを読み込もうとしましたが、よくわかりません。 Python用のSOAP Clientライブラリになるのにもっと適しているものは他にありますか?
編集:念のため、Python 2.6を使用しています。
更新(2016):
SOAP clientだけが必要な場合は、 zeep というよくメンテナンスされたライブラリがあります。 Python 2と3の両方をサポートします。
更新:
上で述べたことに加えて、私はすべての積極的に維持され推奨されているモジュールで常に最新の Python WebServices ページを参照しますSOAPそして他のすべてのものWebサービスの種類。
残念ながら、現時点では、 "最良の" Python SOAPライブラリがあるとは思いません。利用可能な主流のもののそれぞれはそれ自身の長所と短所があります。
古いライブラリ
SOAPy :「最高」でしたが、もう保守されていません。 Python 2.5以降では動作しません
ZSI :使用するのは非常に面倒で、開発は遅いです。 「SOAPpy」と呼ばれるモジュールを持っています。これは(上記の)SOAPyとは異なります。
「新しい」ライブラリ:
SUDS :非常にPythonicで、WSDLを消費するSOAPクライアントを簡単に作成できます。 SOAPサーバーを作成するのは少し難しいです。 (このパッケージはPython 3では動作しません。Python3についてはSUDS-py3を参照してください)
SUDS-py :SUDSのPython 3バージョン
spyne :サーバーを作るのは簡単です、クライアントを作るのはもう少し難しいです。ドキュメンテーションは多少欠けています。
ladon :サーバの作成はsoaplibのようなものです(デコレータを使用)。追加のユーザーコードを必要とせずに、LadonはSOAPよりも多くのインターフェイスを同時に公開します。
pysimplesoap :非常に軽量だがクライアントとサーバーの両方に役立ちます - web2pyに同梱されているweb2pyサーバー統合を含みます。
上記のうち、私は個人的にSUDSを使用しただけで、私はそれが大好きでした。
私はこの質問に対する他の回答のアドバイスに従い、 SUDS 試してみました。 "怒りで"それを使用した後、私は同意する必要があります:SUDSはとても素敵です!強くお勧めします!
プロキシの内側からHTTPSベースのWebサービスを呼び出すのに問題がありました。これを書いている時点では、これは影響を受けますallurllib2
を使用するPython Webサービスクライアント、それで私はここで解決策を文書化します。
Python 2.6.2以下で出荷されているurllib2
モジュールは、HTTPS-over-HTTP-proxyセッションのためにCONNECT
をプロキシに発行しません。これによりタイムアウトが長くなります。運が良ければ、次のようなエラーになります。
abort: error: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
これはPythonのバグ追跡システムでは issue 1424152 でした。 Python 2.xとPython 3.xではこれを修正するパッチがバグレポートに添付されています。 問題はすでに修正されています。
私はSUDSで良い経験をしました https://fedorahosted.org/suds
TestSuiteをドキュメントとして使いました。
SUDSは、それを疑う余地のない方法です。
このチケットが解決されるまで、SUDSを見ている人々にはFYIの警告ですが、SUDSはWSDLの "choice"タグをサポートしていません。
https://fedorahosted.org/suds/ticket/342
参照してください: 泡と選択タグ
SUDSは使いやすいですが、再入可能であることが保証されていません。パフォーマンスを向上させるためにWSDL Client()オブジェクトをスレッド化されたアプリケーション内に保持している場合は、リスクが伴います。このリスクの解決策であるclone()メソッドは、回復不能なPython 5508バグを投げます。これは印刷されるように見えますが、実際には例外を投げません。わかりにくいかもしれませんが、うまくいきます。それはまだはるかに最高のPython SOAPクライアントです。
私たちは新しいライブラリをリリースしました: PySimpleSOAP 、これはシンプルで機能的なクライアント/サーバをサポートします。その目的は、使いやすさと柔軟性(クラス、自動生成コード、xmlは不要)、WSDLのイントロスペクションと生成、WS-I標準への準拠、互換性(Java AXIS、.NET、Jboss WSを含む)です。これはWeb2Pyに含まれており、フルスタックソリューションを実現します(XML_RPC、JSON、AMF-RPCなどの他のサポートされているプロトコルを補完する)。
誰かがSOAPを学んでいる場合、または調査したい場合は、始めるのが良い選択だと思います。
私は、soaplibがsu []を支持してSOAPクライアント( 'sender')を非推奨にしたと考えています。現時点では、soaplibはWebフレームワークにとらわれないSOAPサーバー( 'receiver')であることに焦点を当てています。現在soaplibは活発に開発中で、通常Python SOAPメーリングリストで議論されています:
私の結論では、これがあります。
石鹸クライアント側:
のみを使用Suds-jurko(2016年更新)sudsはよくメンテナンスされ更新されています。
UPDATE 06/2017:suds-jurkoライブラリは更新されず、 見かけ上放棄されました 、
zeep ライブラリをテストしましたが、トークンに関する制限がありました。これでUsernameTokenをサポートするようになりました。タイムスタンプトークンを作成する バグ を報告し、修正しました。
Zeepは上手く始めて、そして ドキュメント を持っているので、私は最近sudsからzeepに私のコードを移行して、そしてうまく働きます。
SOAPサーバー側
私たちはTGWS、soaplib(pysimplesoapはテストされていません)を使用していますが、soaplibを選択する必要があります。
宜しくお願いします、
私が提案したように ここ 私はあなたがあなた自身を転がすことを勧めます。それは実際にはそれほど難しいことではありませんし、Python SOAPライブラリが他にないのはそれが理由だと思います。
泡はかなり良いです。私はSOAPpyを試しましたが、sudsはほとんどすぐに機能するのに対して、私が必要とする方法でそれを機能させることはできませんでした。
本番環境では、Python 2.5.3でSOAPpyを使用しています。
私は手動でSOAPpyでいくつかのファイルを編集しなければなりませんでした(ヘッダーコードが間違った場所にあることについての何か)。
これは助けることができる: http://users.skynet.be/pascalbotte/rcx-ws-doc/python.htm#SOAPPY
私はwsdl
とpython
を検索することによって、合理的な存在で、あなたがどんな有用なクライアントラッパーをするためにもSOAPサーバのwsdl記述が必要であることを見つけました。
私たちは Python Web Services からSOAPpyを使いましたが、ZSI(同じソース)がそれに取って代わっているようです。