2014-05-07 120 views
1

我正在開發一個項目,我必須使用HttpUrlConnection(Android〜)來讀取輸入流。HttpUrlConnection閱讀分塊響應

事實證明,當我讀取輸入流時,數據格式不正確,並且原始內容(由服務器發送)的大小更大。現在,服務器響應標頭包含「Content-Length」「Transfer-Encoding:chunked」,這是我所知道的一個問題,因爲它們都不應該共存。

除了從收到的輸入流HttpUrlConnection包含所有正文內容(與塊偏移信息)。

我有兩個問題:

  • 不應該HttpURLConnection的處理分塊的數據?
  • 如何從沒有分塊信息的輸入流中獲取數據?

回答

2

HttpUrlConnection應該處理分塊數據,你是對的。事實上,你看到這些頭文件意味着它們可能在某個地方被格式化了,並且已經發送了一個\n\n\r\n\r\n,所以HttpUrlConnection將它視爲實際傳輸的一部分。

如果你想獲得的原始數據,使用一個插座,並連接到URL正確的端口上(可能是80,443 SSL)

編輯:java.net.URLConnection狀態的connect()方法下

與資源交互;查詢標題字段和內容。

這表明URLConnection在從任何提供的閱讀器讀取任何內容之前查詢標題信息。請原諒我第一次不包括這個。

+0

你可以分享一些說明* HttpUrlConnection *的文檔嗎? – Cativail

+0

請查看我的編輯更新引文。 –

+0

此外,具有查看標題字段的方法的性質,表明它在標題中讀取。 –