日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

.net 解析Transfer-Encoding:chunked 秒掉网上无用方案

發(fā)布時(shí)間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .net 解析Transfer-Encoding:chunked 秒掉网上无用方案 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

昨天在爬數(shù)據(jù)時(shí),發(fā)現(xiàn)某個(gè)網(wǎng)站Response.Get過(guò)來(lái)的數(shù)據(jù)一直是為空。當(dāng)時(shí)就很奇怪,認(rèn)真看下了響應(yīng)頭。發(fā)現(xiàn)Transfer-Encoding:chunked這個(gè)玩意
網(wǎng)上查了下資料
一般情況HTTP的Header包含Content-Length域來(lái)指明報(bào)文體的長(zhǎng)度。
有時(shí)候服務(wù)生成HTTP回應(yīng)是無(wú)法確定消息大小的,比如大文件的下載,或者后臺(tái)需要復(fù)雜的邏輯才能全部處理頁(yè)面的請(qǐng)求,這時(shí)用需要實(shí)時(shí)生成消息長(zhǎng)度,服務(wù)器一般使用chunked編碼。

在進(jìn)行Chunked編碼傳輸時(shí),在回復(fù)消息的Headers有transfer-encoding域值為chunked,表示將用chunked編碼傳輸內(nèi)容。使用chunked編碼的Headers如下(可以利用FireFox的FireBug插件或HttpWatch查看Headers信息,HttpWatch還可以查看chunked的個(gè)數(shù)):

編碼使用若干個(gè)Chunk組成,由一個(gè)標(biāo)明長(zhǎng)度為0的chunk結(jié)束,每個(gè)Chunk有兩部分組成,第一部分是該Chunk的長(zhǎng)度和長(zhǎng)度單位(一般不寫),第二部分就是指定長(zhǎng)度的內(nèi)容,每個(gè)部分用CRLF(全稱carriage return/line feed 回車換行)隔開(kāi)。在最后一個(gè)長(zhǎng)度為0的Chunk中的內(nèi)容是稱為footer的內(nèi)容,是一些沒(méi)有寫的頭部?jī)?nèi)容。

這上面是網(wǎng)上的原話,具體更詳細(xì)的可以去參考里面看看

不過(guò)網(wǎng)上很多關(guān)于chunked .net解析都是tmd無(wú)用,把代碼貼出來(lái),后面的小哥們不要再痛苦。

哥當(dāng)時(shí)也是寫不出解析代碼,想著網(wǎng)上找找,國(guó)內(nèi)找的都千扁一屢,最后在國(guó)外論壇找到了方案。

最后通過(guò)Fiddler調(diào)試看到,POST的網(wǎng)站有返回Content-Length,此時(shí)心都炸了。找了半天,你居然告訴我,是有Length返回。但是瀏覽器F12看到的卻是Transfer-Encoding:chunked。
試著在Fiddler上面模擬調(diào)試,看看請(qǐng)求前,請(qǐng)求后的變化。
把瀏覽器請(qǐng)求頭內(nèi)容復(fù)制到Fiddler的參數(shù)里面,點(diǎn)擊exec,響應(yīng)區(qū)域顯示為空。我的神喲這tmd什么情況,參數(shù)有問(wèn)題?,認(rèn)真對(duì)照一下吧,總會(huì)發(fā)現(xiàn)有問(wèn)題
。。。。。
當(dāng)時(shí)我沒(méi)有特別注意Cookie,也沒(méi)有傳過(guò)去,Cookie為空。把瀏覽器里面的Cookie信息拷貝進(jìn)去。exec,斷點(diǎn)命中了。。。。。。。。。當(dāng)時(shí)是多么的開(kāi)心,說(shuō)明這個(gè)網(wǎng)站的POST必須要cookie

解析代碼也找到,那再把.net代碼檢查下。運(yùn)行,拿到了數(shù)據(jù)。。。。不寫了

貼代碼

StringBuilder sb1 = new StringBuilder(); Byte[] buf = new byte[256]; Stream resStream = myHttpWebResponse.GetResponseStream();resStream = new GZipStream(resStream, CompressionMode.Decompress);string tmpString = null; int count = 0; do { count = resStream.Read(buf, 0, buf.Length - 1); if (count != 0) { tmpString = Encoding.UTF8.GetString(buf, 0, count); sb1.Append(tmpString); } } while (count > 0);

?

參考
https://imququ.com/post/transfer-encoding-header-in-http.html
還有一個(gè)網(wǎng)站找不到了,可憐了。

http://www.dayuji1000.com/vrtechnews/index.html
http://www.xafuda.cn/article/jnd3.5.html

轉(zhuǎn)載于:https://www.cnblogs.com/kengwfpzu920/p/6655046.html

總結(jié)

以上是生活随笔為你收集整理的.net 解析Transfer-Encoding:chunked 秒掉网上无用方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。