Подсчет байтов, отправленных / полученных по HTTP

StackOverflow https://stackoverflow.com/questions/1447244

  •  22-07-2019
  •  | 
  •  

Вопрос

В 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-запросы достаточно просты, поэтому вы можете попытаться восстановить его, используя предоставленную информацию. Что-то в форме:

// 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-протокола , чтобы убедиться в точности ваших результаты.

Другие советы

Оберните getInputStream () и getOutputStream () HTTPURLConnection в ваши собственные потоки, которые подсчитывают проходящие через них байты. Или, что еще лучше, используйте библиотеку Apache Commons IO - там есть реализация потоковых подсчетов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top