2013-05-09 77 views

回答

4

無法準備好使用代碼,但Apache HttpClient庫支持「全部」開箱即用。

這是維基百科的分塊響應示例。在讀取正文部分之前,您不知道數據的確切字節大小。請注意每個塊的大小是十六進制值,最後一個大小的塊是數據的結尾。它也由2個字節的CRLF分隔符終止。

Transfer-Encoding: chunked\r\n 
Content-Type: text/plain\r\n 
\r\n 
4\r\n 
Wiki\r\n 
5;extkey=extvalue\r\n 
pedia\r\n 
E\r\n 
.in\r\n 
\r\n 
chunks.\r\n 
0\r\n 
AfterBodyHeader: some value\r\n 
AfterBodyHeader2: any value\r\n 
\r\n 
  • 讀字節,直到CRLF(\ r \ n或0D0A十六進制)
  • 放下一切之後;分界符或停止在追蹤CRLF時,某些回覆可能會在塊大小的行上添加擴展。忽略它們,除非您等待已知的鍵值對。
  • 轉換十六進制整數,它會告訴你NUM的數據字節塊的字節
  • 讀取X NUM和追加到ByteArrayOutputBuffer
  • 讀尾隨CRLF分隔符字節,而忽略它
  • 如果不是0尺寸再次尺寸讀+塊數據
  • 一些響應可以添加AfterHeaders它們就像在響應
  • 開始後報頭大小的0塊一個空行(\ r \ n)指示完整的HTTP響應結束。如果沒有AfterHeaders最後應該看到字節0 \ r \ n \ r \ n。請注意,常規塊可能包含空行,因此直到0大小的指標纔會終止解析。

此示例使用\ r \ n佔位符以指示2字節的定界符作爲規格要求

+0

謝you..but我在一個頁面中發現CHUNK_SIZE = INT(line.strip()。分裂(」 ;')[0],16)我不明白這一行。他們已經給出了這個邏輯來查找塊的大小。但是什麼是[0]索引以及爲什麼放置16個。我不明白這個說法。請你幫忙我。 – user2365917 2013-05-09 11:11:38

+0

「5; extkey = extvalue」.split(;)給出了兩個元素[0] =「5」,[1] =「extkey = extvalue」的數組。 int(arr [0],16)將第一個字符串元素轉換爲整數值,請注意chunk的大小是十六進制,這就是爲什麼16的指示符。如果行沒有擴展名(;)分割只返回一個大小的數組和strToInteger轉換仍然有效。 – Whome 2013-05-09 11:21:56

+0

上面的邏輯即int(arr [0],16)直接給出了我看來的字節塊大小。 – user2365917 2013-05-09 11:30:52

相關問題