Frage

Ich würde gerne wissen, wie viele Daten als Antwort auf eine bestimmte HTTP-Request gesendet wurden. Was ich derzeit mache, ist Folgendes:

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

// Überprüfen Sie die Antwort auf die Inhaltsgröße int feedSize = con.getContentLength ();

Das Problem ist, dass Content-Legnth nicht immer festgelegt ist. ZB, wenn der Server übertransfer -kodiert = chunkiert Ich bekomme einen Wert von -1 zurück.

Ich tue nicht Benötigen Sie dies, um Fortschrittsinformationen anzuzeigen. Ich muss nur die Größe der Daten kennen, die mir nach dem Abschluss gesendet wurden.

Hintergrund: Ich brauche diese Informationen, weil ich sie mit der Größe einer Antwort vergleichen möchte, die mit GZIP -Codierung gesendet wurde.

War es hilfreich?

Lösung

Ich würde a verwenden Commons-io countingInputStream, was den Job für Sie erledigen würde. Ein volles, aber triviales Beispiel:

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

Andere Tipps

Sie können sich ausdehnen FilterInputStream, überschreiben die read(), read(byte[],int,int), und skip Methoden, damit nach dem Aufrufen der super Formular aktualisieren sie einen Zähler mit der Anzahl der gelesenen Bytes.

Wickeln Sie dann den Eingangsstream ein, der von zurückgegeben wurde URLConnection mit einem von diesen und verwenden Sie den Wrapper anstelle des ursprünglichen Streams. Wenn Sie fertig sind, können Sie Wrapper seinen Schalter abfragen.

Andere ("manuelle") Ansätze werden ein Tool wie Yslow verwenden, um Statistiken in einem Browser oder Wireshark zu sammeln, um den Datenverkehr im Netzwerk zu untersuchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top