主にJSONデータをシャッフルするボトルベースのHTTPサーバーがあります。これをPython2.7で実行すると、完全に機能し、ルートハンドラーでは、を介してJSONデータにアクセスできますbottle.request.json
。ただし、Python3.4で実行するとbottle.request.json
はNone
です。
HTTPトラフィックを調べましたが、どちらの場合もまったく同じです(Pythonに依存しないクライアントの制御下にあるため、予想どおりです)。
また、どちらの場合もJSONデータがボトルに到達していることがわかります。印刷するとbottle.request.params.keys()
、どちらの場合も、文字列化されたJSONがリスト内の唯一のエントリとして表示されます。そして、文字列はどちらの場合も同じです。ただし、何らかの理由で、Python 2バージョンはJSONデータを認識していますが、Python3バージョンは認識していません。
不思議なことに、これは以前は機能していましたが、最近のコードまたはボトル(あるいはその両方)の変更により、問題が発生しました。ただし、コードを見ると、問題を作成するために何をしたのかわかりません。
誰かが何が起こっているのか知っていますか?これは、クライアント側、ボトル構成側で私が間違っていることですか、それともボトルの欠陥ですか?私はグーグルとボトル問題追跡システムの両方でこの問題を検索しましたが、役に立ちませんでした。
これはボトルとは何の関係もないことがわかりました。この問題の最終的な原因は、emacs lisp HTTPライブラリの欠陥が原因で、クライアント要求に2つのContent-Type
ヘッダーがあることです。恥ずかしいことに、私はこの欠陥についてかなり前から知っていましたが、適切に回避できたと思いました。
Python 2とPython 3の違いが見られる理由は、100%わかりませんが、今のところ、バージョン間のWSGI機構の無害な変更に関係していると思います。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加