Pergunta

Em Java,
Como poderiam os bytes enviados e recebidos através de uma ligação HTTP activa ser contado?
Eu quero mostrar algumas estatísticas como:

Bytes Sent     : xxxx Kb   
Bytes Received : xxxx Kb  
Duration       : hh:mm
Foi útil?

Solução

É difícil ver como você pode decorar HttpConnection para contar os bytes de dados brutos. Você poderia Reimplementar HTTP utilizando soquetes, mas isso teria de ser muito importante para ir para os comprimentos.

resposta de exemplo 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....
solicitações

HTTP são razoavelmente simples, de modo que você pode tentar reconstruí-lo usando as informações que está exposto. Algo na forma:

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

Essa implementação é incompleto e não foi testado. Você precisaria estudar-se sobre os detalhes do protocolo HTTP para garantir a precisão da sua resultados.

Outras dicas

Enrole do HttpURLConnection getInputStream () e getOutputStream () em suas próprias correntes que contam os bytes que passam por eles. Ou melhor ainda usar a biblioteca Apache Commons IO -. Eles têm contando implementações de fluxo de lá

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top