1. 程式人生 > >模擬http請求chunked解析辦法

模擬http請求chunked解析辦法

今天在幹壞事抓取別人頁面(http://www.xafuda.cn/article/about.html)時候遇到一個問題,平時我們在post資料後,大不了要求提交cookie,但是今天這個測試了N遍不需要coookie都行的,但是抓取到的始終是亂碼,怎麼解析都不行。於是自己又把cookie和一大堆header給加上,還是同樣的問題,於是開始鬱悶了。.net指令碼不行,但是同樣的提交瀏覽器上面就行,這個是怎麼回事呢?

於是開始分析能看到的資料,終於看到一個特別的地方,

Transfer-Encodingchunked
於是開始鬱悶了,這個到底是啥意思。谷歌了一番終於懂了,也找到對策了。
維基百科上面是這樣解釋的:

我們平時請求資料的時候都會在header裡面看到一個

Coontent-Length: xxxx
這個是表示這次傳送的資料的長度,說明是一個完整的http資料的傳送,但是今天看到的這個卻沒有這一項,出現的卻是


分塊傳輸編碼(Chunked transfer encoding)是超文字傳輸協議(HTTP)中的一種資料傳輸機制,允許HTTP由網頁伺服器傳送給客戶端應用( 通常是網頁瀏覽器)的資料可以分成多個部分。分塊傳輸編碼只在HTTP協議1.1版本(HTTP/1.1)中提供。
通常,HTTP應答訊息中傳送的資料是整個傳送的,Content-Length訊息頭欄位表示資料的長度。資料的長度很重要,因為客戶端需要知道哪裡是應答訊息的結束,以及後續應答訊息的開始。然而,使用分塊傳輸編碼,資料分解成一系列資料塊,並以一個或多個塊傳送,這樣伺服器可以傳送資料而不需要預先知道傳送內容的總大小。通常資料塊的大小是一致的,但也不總是這種情況。


終於知道這個是啥了,那邊把資料給分段了,怪不得資料一直有問題,於是網上到處找解決辦法,終於找到一個很巧妙的方法:使用HTTP 1.0協議,伺服器會主動放棄chunked編碼,所以在Request裡面加個VERSION,1.0
問題就解決了,就是這麼簡單