私はこの質問のソースコードを使用しています 非同期で httprequest を実行し、応答のダウンロードの進行状況を 表示して、Web ページの html ソースを取得し、これまでにダウンロードされたデータを含むプログレスバーを表示し、ページの合計サイズを表示します。
その特定のコードは実際には ICS 4.0.3 では機能しません。これは、clHeaders[0] が何も指さず、サーバーの応答から Content-Length ヘッダーが省略されているため、インデックス 0 で ArrayIndexOutOfBounds という例外が発生するためです。それが問題だった場合に備えて getContentLength を使用してみました - 負の値 -1 を返し、すべてのヘッダーを反復処理しましたが、Content-Length はありませんでした。これらのビットを削除した後、コードは正常に動作し、Web ページが取得され、ファイルに書き込まれ、ダウンロード中のサイズが表示されますが、実際にすべてをダウンロードするまでは明らかに最終サイズではありません。
原因については、次の 3 つの考えしかありません。
- Content-Length ヘッダーを送信していないため、受信していませんが、これは間違っているように聞こえます。さらに、HttpClient がバックグラウンドで送信していないかどうかはわかりません。
- サーバーの応答がストリーミングまたはチャンクされている場合、getContentLength が -1 を返す可能性があるという別の質問をここで読みました。
- Gzip? しかし、それを無効にする方法や、そもそも有効になっていたかどうかはわかりません
サーバーが壊れていると思われる場合は、Google を含む多くの Web サイトを試しましたが、Content-Length ヘッダーはまったくありません。