質問

私は、特定のHTTPリクエストに応答して送信されたデータ量を知っているしたいと思います。 私は現在やっていることはこれです:

   HttpURLConnection con = (HttpURLConnection) feedurl.openConnection();

//コンテンツサイズの応答をチェック    INT feedsize = con.getContentLength();

問題は、コンテンツlegnthは常に設定されていないこと、です。例えば。サーバが転送エンコーディングを使用する場合=私は-1の値を取り戻すチャンク。

私がやるの のない進捗情報を表示するにはこれが必要。私はちょうどそれが行われた後に私に送られたデータのサイズを知っておく必要があります。

背景:私はGZIPエンコーディングを使用して送信された応答の大きさと比較したいと思いますので、私はこの情報が必要

役に立ちましたか?

解決

私はコモンズ-IOを使用したいですあなたのための仕事をするだろうCountingInputStream に、。フルしかし、簡単な例:

public long countContent(URL feedurl) {
  CountingInputStream counter = null;
  try {
     HttpURLConnection con = (HttpURLConnection) feedurl.openConnection();
     counter = new CountingInputStream(con.getInputStream());
     String output = IOUtils.toString(counter);
     return counter.getByteCount();
  } catch (IOException ex) {
     throw new RuntimeException(ex);
  } finally {
     IOUtils.closeQuietly(counter);
  }
}

他のヒント

あなたはFilterInputStreamフォームを呼び出した後、彼らは読み込んだバイト数でカウンタを更新するようread()read(byte[],int,int)、およびskipメソッドをオーバーライドし、superを拡張することができます。

そして、これらのいずれかでURLConnectionによって返された入力ストリームをラップし、元のストリームの代わりにラッパーを使用しています。設定が完了したら、あなたはラッパーのそのカウンターを照会することができます。

その他(「マニュアル」)のアプローチは、ネットワーク上のトラフィックを検査するために、ブラウザでの統計情報を収集するためにYSlowのようなツールを使用するか、またはWiresharkのだろう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top