2009-05-24 5 views
0

ステータス情報をサーバに伝えるアプリケーションがあります。この情報は実際には文字列キーを備えた大きな辞書です。Python:大きな辞書をサーバに送信する

サーバーはTurbogearsに基づいてWebアプリケーションを実行するため、呼び出されるサーバー側のメソッドは任意の数のキーワード引数を受け入れます。

実際のデータに加えて、認証に関する情報(ID、パスワード..)を送信する必要があります。 1つのアプローチは、これをすべて含む大規模な辞書を単純にurlencodeして、リクエストでサーバーに送信することです。

urllib2.urlencode(dataPlusId) 

しかし、実際には、認証を行い、データセットを受け入れるメソッドは、データについて多く知っている必要はありません。データは透過的に送信され、受け入れられ、データを扱う別のメソッドに渡されます。

私の質問は、大規模なデータの辞書を一般的なサーバーに送信する最良の方法は何ですか?この特定のケースでは、ここで認証を処理する最善の方法は何ですか?

答えて

3

私は最善の方法は、適切な転送フォーマットでデータをエンコードする(これは保存されませだとしてあなたは、ピクルスを使用してはならないが、それはバイナリすることができます)、私は何multipart post request

としてそれを転送することだと思いますあなたがレポで作業できるかどうかは分かりません。サインインと関数呼び出しを1ステップでサポートしていない場合は、おそらく自分で証明書を確認する必要があります。

xmlでデータをラップすることができる場合は、XML-RPCも使用できます。

2

辞書をファイルにシリアル化してファイルをアップロードしないのはなぜですか?このようにして、サーバーはオブジェクトを辞書に戻して辞書に戻すことができます。

1

データにpickleを使用しようとしましたか?

+1

セキュリティ上の理由から、ピクルスドオブジェクトをネットワーク経由で転送しないでください – ebo

+0

xmlはどのように安全ですか? – Geo

+0

pickleされたデータを偽造して、unpicklerをクラッシュさせることができます。 XMLパーサはこれに対して強化されています。 – ebo

2

あなたのpythonデータのPOSTを行います(他の回答に示唆されているようにバイナリを使用します)、あなたのウェブサーバを使ってセキュリティを処理します。 ApacheとMicrosoftの両方のサーバーは、さまざまな方法(SSLクライアント証明書、パスワード、システムアカウントなど)を使用して認証を行うことができます。

ちょうど行くつもりならば、もう一度辞書に戻してください)。

4

安全性が懸念される場合は、ピクルの回避に関するすべての回答に同意します(データがunpickledになる前に送信者が認証されるとは限りませんが、セキュリティの問題がある場合は、 1); JSONはこのような場合に役立ちます(または、他に何もしなければXML!、 - )。

SpliFFが推奨するように、Webサーバーに認証を委ねるのが理想的であり、一般的にはSSL(HTTPS)が適しています。それが実現不可能だが、クライアントとサーバーが「秘密」を共有できるようにするのが適切であれば、シリアル化された文字列を暗号化された形式で送信するのが最適かもしれない。

2

私は個人的にSimpleJSONを両端で使用し、マルチパートデータとして「ファイル」(実際にはストリームになるでしょう)をポストします。

しかし、それは私です。他にもオプションがあります。

関連する問題