2013-04-09 128 views
7

我的服務器版本是我開發的機器上進行如下:設置setChunkedStreamingMode沒有數據傳送到服務器

的Apache/2.2.21(Win32的)mod_fcgid/2.3.6

我一直在測試HttpURLConnection,因爲我的項目需要簡單的流媒體功能。我已經閱讀了@BalusC關於如何使用這個類的大概介紹。

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

我目前遇到的困難是設置setChunkedStreamingMode時。無論我將其設置爲 ,我的數據流似乎都無法訪問服務器 當我的服務器api方法/連接被調用/創建時,數據流爲空。但是,如果我刪除它,它工作正常。

我看到其他人有類似的問題:

Java/Android HttpURLConnection setChunkedStreamingMode not working with all PHP servers

,但沒有真正的解決方案。我無法簡單地將它設置爲setFixedLengthStreamingMode,因爲內容(json)的長度是可變的。

這是不行的。我可能會傳輸大量的數據,因此無法將數據存儲在內存中。

我的問題是,我怎樣才能讓setChunkedStreamingMode發揮出色?這是服務器設置問題還是可以在代碼中修復?

編輯 我已經在我的生產服務器上測試了我的代碼,它沒有任何問題。但是我仍然想知道爲什麼我的本地機器上的Apache服務器失敗。任何幫助仍然非常感激。

+0

定義「似乎沒有做到」。 – EJP 2013-04-09 23:05:37

+0

@EJP你說得很對,這真是一句短語。事實上,它確實將它交給服務器,但是,沒有任何數據。相比於'setChunkedStreamingMode'被刪除和我的數據通過。據我所知,也沒有錯誤。 – HGPB 2013-04-09 23:55:51

+0

謝謝,現在定義「數據流爲空」。如何衡量? – EJP 2013-04-11 01:07:05

回答

1

嘗試添加此HTTP標頭:

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

我haved一個問題是這樣的:雖然我haved設置分塊的HTTP流模式(urlConnection.setChunkedStreamingMode(0)),它不是工作,而是把HTTP它上面的頭可以正常工作。

+7

感謝您的回覆,這與設置'setChunkedStreamingMode'具有相同的效果。沒有收到數據。確實非常奇怪。我也已經嘗試過了。我想你的答案應該是:'urlConnection.setRequestProperty(「Transfer-Encoding」,「chunked」)'。 – HGPB 2013-04-10 22:18:20

+1

很難相信你所描述的真正解決了你的問題。 'HttpURLConnection'在必要時自己設置頭部。 – EJP 2013-04-11 01:44:36

0

我有類似的問題。在我的情況下,它是安裝了病毒掃描程序的客戶端系統。這些掃描儀有時會有身份竊取模塊,它會攔截POST s,掃描身體並將其傳遞。

在我的情況下,BitDefender在傳遞之前緩存了大約5MB。

如果整個有效負載小於POST作爲非分塊固定長度請求交付。

0

我有一個類似的問題,使用HttpURLConnection。只需添加:

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

到您的連接或禁用所有連接:

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

從API約斷開():

釋放此連接,這樣它的資源可能重新使用或關閉。 與其他Java實現不同,這不一定會關閉可重用的套接字連接。您可以通過在發出任何HTTP請求之前將http.keepAlive系統屬性設置爲false來禁用所有連接重用。