Net中如何解析HTTP報文資料?

時間 2021-05-31 04:49:34

1樓:shuhari

HttpClient用的少,用WebRequest的話內建有自動解壓內容的功能

var request = (HttpWebRequest)WebRequest.Create(url);

request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

2樓:

System.Net.Connection.ParseResponseData

.NET自己是這麼做的,只不過你直接用不了。解析報文並不難,自己擼一套吧。

3樓:WhiteMind

這個我近期剛好做過

HttpResponse的解析類

首先看下Http協議根據協議來讀

先讀取一行,這一行是

協議版本[空格]狀態碼[空格]狀態碼描述[CRLF](CRLF即為\r\n組成的換行符)

然後迴圈讀取行,直到讀到空行代表Response的Head部分讀完

我的做法是將這些Head都放到乙個HashMap裡,方便讀取,比如headers["host"]即可直接取出host的值,封裝下做成getValue(String headerName),在沒有這個頭部的時候返回null

一般head裡會有content-length:[length]或者transfer-encoding:chunked

這兩個頭部不能共存,如果共存算做錯誤頭部,直接呼叫content-length的(一般不會出現共存情況,只是做個錯誤時的處理)

當有content-length時,取出他的值,即為接下來要讀取的Response主體資料部分的長度,直接一次性讀完或者分段讀取皆可

當有transfer-encoding:chunked時就是區塊化傳輸(不知道說的對不對,個人理解,輕噴...),這種讀法格式特別一點是

乙個區塊的資料長度(16進製制)[CRLF]

乙個區塊的資料內容

乙個區塊的資料長度(16進製制)[CRLF]

乙個區塊的資料內容

通過多個區塊的組合來傳輸大檔案內容,當讀到乙個區塊的資料長度為0時代表主體部分結束

如果2個都沒有,那只能通過伺服器斷開連線和超時來代表資料讀取完成了

第一次寫這麼長的回答_(:з」∠)_

4樓:華原

.net不太懂,但是這種http的請求響應頭中不是有content-type嗎,你自己搞乙個對映關係,把格式和處理方式對應起來。如果感覺content-type還不夠,那就再根據內容的magic來輔助判斷一下,妥妥的。

5樓:durow

http response解析很容易,從題主截圖看已經比較明白了。第一行用空格隔開了協議,狀態碼,狀態碼說明,第二行開始是http頭,每行乙個鍵值對,用冒號隔開,當第一次讀到空行的時候表示http頭結束了,空行以下是內容。http頭中的Content-Encoding為gzip說明內容用了gzip壓縮。

6樓:丁國鋒

7樓:蟬心

目前我自己找到了乙個老外提供的轉換類,並修正了其中的一些要命的錯誤,能夠實現把報文頭中的屬性值分別提取,以及把實際資料單獨分割出來。

有gzip壓縮的資料:

沒有壓縮的資料:

es/1183

如何提高 Android app 中 http 請求的響應時間?

MrPeak 請求慢可能的原因有很多,瓶頸不一定在伺服器,通過客觀的分析之後才能下結論。7s的響應時間很嚴重了,一般這種情況和server聯機除錯下就能看出問題,如果server不願意配合,可採取如下方式 http請求,可以用firebug分析下請求的整個流程。對網路協議比較熟悉的也可以用tcpdu...

如何解析海賊王818話?

茯苓 就像是冥冥中注定的一樣,感覺桃之助會和父親御田一樣和路飛一起到達拉夫德魯,找到one piece。草帽一夥和羅傑當年的前進軌跡太過相似,一切就像宿命一般,甚至令我閃過這樣的想法 路飛有二擋三擋甚至現在已經開發了四擋,頻繁使用這些負荷極大的招式對身體的傷害甚至恐怕已經危及生命,那麼路飛會不會像羅...

如何解析《棠梨煎雪》的歌詞?

張磊 煎雪是以雪水煮茶,棠梨是茶葉一樣的東東,為什麼我覺得這個不是茶,是冰糖雪梨這種治咳嗽的藥膳呢。半生風雪是那個喝茶吃藥膳的人,煮茶的人應該是希望半生風雪的人從此離開風雪,過比較養生的生活吧。青鯉來時遙聞春溪聲聲碎 嗅得手植棠梨初發輕黃蕊 難道鯉魚和大雁似的什麼時候來什麼時候走嗎?作者沒難為人,來...