2013-04-09 8 views
7

Mein Server-Version ist wie auf meinem dev Maschine folgt:Rahmen setChunkedStreamingMode in HttpURLConnection nicht Daten an den Server liefern

Apache/2.2.21 (Win32) mod_fcgid/2.3.6

I habe getestet HttpURLConnection als mein Projekt erfordert einfache Streaming-Funktionen. Ich habe eine großartige Zusammenfassung von @BalusC über die Verwendung der Klasse gelesen.

Using java.net.URLConnection to fire and handle HTTP requests

Die Mühe, die ich zur Zeit habe, ist, wenn setChunkedStreamingMode Einstellung. Unabhängig davon, was ich es auf mein Stream scheint es nicht auf den Server der Datenstrom ist leer, wenn mein Server API-Methode/Verbindung aufgerufen/gemacht wird. Wenn ich es jedoch entferne, funktioniert es gut.

Ich habe eine andere Person mit einem ähnlichen Problem gesehen:

Java/Android HttpURLConnection setChunkedStreamingMode not working with all PHP servers

aber ohne wirkliche Auflösung. Ich kann es nicht einfach auf setFixedLengthStreamingMode setzen, weil der Inhalt (json) in der Länge variabel ist.

Das ist NICHT OK. Ich werde möglicherweise sehr große Datenmengen übertragen und kann daher die Daten nicht im Speicher ablegen.

Meine Frage ist, wie bekomme ich SetChunkedStreamingMode, um nett zu spielen? Ist es ein Server-Setup-Problem oder kann es im Code behoben werden?

EDIT Ich habe jetzt meinen Code auf meinem Produktionsserver getestet und es funktioniert kein Problem. Ich würde jedoch immer noch gerne wissen, warum mein Apache-Server auf meinem lokalen Rechner ausfällt. Jede Hilfe wird immer noch sehr geschätzt.

+0

Definieren Sie "scheint es nicht zu machen". – EJP

+0

@EJP Du hast recht, das ist wirklich eine schlechte Wendung. In der Tat schafft es es zum Server jedoch gibt es überhaupt keine Daten. Im Vergleich zu "SetChunkedStreamingMode" entfernt und meine Daten kommen durch. Es gibt auch keine Fehler, soweit ich das beurteilen kann. – HGPB

+0

Danke, jetzt definieren "der Datenstrom ist leer". Wie gemessen wie? – EJP

Antwort

1

Versuchen das Hinzufügen dieser HTTP-Header:

urlConnection.setRequestHeader("Transfer-Encoding","chunked"); 

ich haved ein Problem wie dieses: Obwohl ich den chunked HTTP-Streaming-Modus haved (urlConnection.setChunkedStreamingMode (0)), ist es nicht funktionierte, aber setzen die HTTP Kopfzeile darüber funktioniert gut.

+7

Danke für die Antwort, dies hat die gleiche Wirkung wie die Einstellung 'setChunkedStreamingMode'. Es werden keine Daten empfangen. Wirklich sehr merkwürdig. Das hatte ich auch schon probiert. Auch ich denke, Ihre Antwort sollte lesen: 'urlConnection.setRequestProperty (" Transfer-Encoding "," chunked ")'. – HGPB

+1

Es ist schwer zu glauben, dass das, was Sie beschrieben haben, Ihr Problem wirklich gelöst hat. 'HttpURLConnection' setzt diesen Header bei Bedarf selbst. – EJP

0

Ich hatte ein ähnliches Problem. In meinem Fall war auf dem Client-System ein Virenscanner installiert. Diese Scanner haben manchmal Identitätsdiebstahl-Module, die POST s abfangen, den Körper scannen und dann weiterleiten.

In meinem Fall BitDefender im Cache etwa 5 MB vor dem Weiterleiten an.

Wenn die gesamte Nutzlast geringer war, wurde die POST als nicht-chunked Anfrage fester Länge geliefert.

0

Ich hatte ein ähnliches Problem mit HttpURLConnection.Fügen Sie einfach:

conn.setRequestProperty("connection", "close"); // disables Keep Alive 

zu Ihrer Verbindung oder deaktivieren Sie es für alle Verbindungen:

System.setProperty("http.keepAlive", "false"); 

Von der API über disconnect():

Releases diese Verbindung, so dass seine Ressourcen sein kann entweder wiederverwendet oder geschlossen. Im Gegensatz zu anderen Java-Implementierungen schließt dies nicht unbedingt Socketverbindungen, die wiederverwendet werden können. Sie können die Wiederverwendung aller Verbindungen deaktivieren, indem Sie die http.keepAlive-Systemeigenschaft auf "false" festlegen, bevor Sie HTTP-Anforderungen ausgeben.

Verwandte Themen