Google Appengine アプリケーションに POST するために perl スクリプトを使用しています。-F オプションを使用して、XML を含むテキスト ファイルを投稿します。
http://www.cpan.org/authors/id/E/EL/ELIJAH/bget-1.1
すでにテスト済みのバージョン 1.2 があり、同じ問題が発生します。ポストはこんな感じ。
Host: foo.appspot.com
User-Agent: lwp-request/1.38
Content-Type: text/plain
Content-Length: 202
<XML>
<BLAH>Hello World</BLAH>
</XML>
例を修正したので、202 は正しくありませんが、心配する必要はありません。問題に。Content-Length はファイルのバイト数と一致しますが、Content-Length を手動で増やさない限り、すべてのファイルが送信されるわけではなく、数バイトが切り捨てられます。切り捨てられるバイト数は、サイズの異なるファイルでは同じではありません。スクリプトで -r オプションを使用したところ、送信内容とすべてのファイルが送信されていることがわかりますが、Google Appengine self.request.body は、すべてが受信されているわけではないことを示しています。解決策は Content-Length の正しい数値を取得することだと思いますが、どうやらそれはファイルのバイト数や perl スクリプトが何らかの形でマングリングしているほど単純ではないようです。
更新: 正しい答えをくれた Erickson に感謝します。printf を使用してファイルの末尾に文字を追加すると、常にファイル内の行数が正確に切り捨てられました。サーバー側のすべての文字を繰り返し処理することで、追加されているものを把握できると思いますが、それだけの価値はありません。これは、App Engine 用に設定された Google グループでも回答されませんでした!