HTTP経由で送受信されたバイトのカウント
質問
Javaでは、
アクティブなHTTP接続を介して送受信されたバイトはどのようにカウントされますか?
次のような統計情報を表示したい:
Bytes Sent : xxxx Kb
Bytes Received : xxxx Kb
Duration : hh:mm
解決
HttpConnection で生バイトデータをカウントします。ソケットを使用してHTTPを再実装することもできますが、これらの長さにするには、これが非常に重要になります。
stackoverflow.com
からのサンプル応答:
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: Mon, 21 Sep 2009 11:46:48 GMT
Vary: Accept-Encoding
Server: Microsoft-IIS/7.0
Date: Mon, 21 Sep 2009 11:46:48 GMT
Content-Length: 19452
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>...remaining data....
HTTPリクエストはかなり単純なので、公開されている情報を使用してHTTPリクエストを再構築してみてください。形式の何か:
// TODO: edge cases, error handling, header delimiter, etc.
int byteCount = 0;
int headerIndex = 0;
while (true) {
String key = httpConnection.getHeaderFieldKey(headerIndex);
if (key == null)
break;
String value = httpConnection.getHeaderField(headerIndex++);
byteCount += key.getBytes("US-ASCII").length
+ value.getBytes("US-ASCII").length + 2;
}
byteCount += httpConnection.getHeaderFieldInt("Content-Length",
Integer.MIN_VALUE);
その実装は不完全でテストされていません。 HTTPプロトコルの詳細を調べて、正確性を確認する必要があります。結果。
他のヒント
HTTPURLConnectionのgetInputStream()およびgetOutputStream()を、それらを通過するバイト数をカウントする独自のストリームでラップします。または、Apache Commons IOライブラリを使用することをお勧めします-彼らはそこにストリーム実装を数えています。
所属していません StackOverflow