Question

En Java,
Comment compter les octets envoyés et reçus via une connexion HTTP active?
Je souhaite afficher des statistiques telles que:

Bytes Sent     : xxxx Kb   
Bytes Received : xxxx Kb  
Duration       : hh:mm
Était-ce utile?

La solution

Il est difficile de voir comment décorer HttpConnection pour compter les données brutes en octets. Vous pouvez réimplémenter HTTP en utilisant des sockets, mais cela doit être assez important pour aller à ces longueurs.

Exemple de réponse de 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....

Les requêtes HTTP sont relativement simples, vous pouvez donc essayer de les reconstruire en utilisant les informations exposées. Quelque chose de la forme:

// 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);

Cette implémentation est incomplète et non testée. Vous devez étudier les détails du protocole HTTP pour garantir l'exactitude de vos résultats.

Autres conseils

Enveloppez les méthodes getInputStream () et getOutputStream () de HTTPURLConnection dans vos propres flux qui comptent les octets qui les traversent. Ou encore mieux, utilisez la bibliothèque Apache Commons IO: ils contiennent des implémentations de flux de comptage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top