亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#如何解析http報文

2020-01-24 01:34:25
字體:
來源:轉載
供稿:網友

下面通過一段內容有文字說明有代碼分析,并附有展示圖供大家學習。

要解析HTTP報文,需要實現以下操作:

讀取HTTP報頭提供的各種屬性
分析屬性值,從中獲取內容編碼和字符集編碼
將報頭數據和內容進行分離
判斷內容是否文本還是二進制,如果是二進制的則不進行處理
如果內容是文本,按報頭中提供的內容編碼和字符集編碼進行解壓縮和解碼
目前沒有找到.Net框架內置的解析方法,理論上HttpClient等類在內部應該已經實現了解析,但不知為何沒有公開這些處理方法。(亦或是我沒找到)

那么只能自己來解析這些數據了。

我們先來看看這個經過gzip壓縮的文本內容的HTTP報文:

這里提供一個老外寫的簡陋的解析類(已經過修改,原代碼中存在一些嚴重BUG):

public enum HTTPHeaderField{ Accept = 0, Accept_Charset = 1, Accept_Encoding = 2, Accept_Language = 3, Accept_Ranges = 4, Authorization = 5, Cache_Control = 6, Connection = 7, Cookie = 8, Content_Length = 9, Content_Type = 10, Date = 11, Expect = 12, From = 13, Host = 14, If_Match = 15, If_Modified_Since = 16, If_None_Match = 17, If_Range = 18, If_Unmodified_Since = 19, Max_Forwards = 20, Pragma = 21, Proxy_Authorization = 22, Range = 23, Referer = 24, TE = 25, Upgrade = 26, User_Agent = 27, Via = 28, Warn = 29, Age = 30, Allow = 31, Content_Encoding = 32, Content_Language = 33, Content_Location = 34, Content_Disposition = 35, Content_MD5 = 36, Content_Range = 37, ETag = 38, Expires = 39, Last_Modified = 40, Location = 41, Proxy_Authenticate = 42, Refresh = 43, Retry_After = 44, Server = 45, Set_Cookie = 46, Trailer = 47, Transfer_Encoding = 48, Vary = 49, Warning = 50, WWW_Authenticate = 51};class HTTPHeader{ #region PROPERTIES private string[] m_StrHTTPField = new string[52]; private byte[] m_byteData = new byte[4096]; public string[] HTTPField {  get { return m_StrHTTPField; }  set { m_StrHTTPField = value; } } public byte[] Data {  get { return m_byteData; }  set { m_byteData = value; } } #endregion // convertion System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); #region CONSTRUCTEUR /// <summary> /// Constructeur par défaut - non utilisé /// </summary> private HTTPHeader() { } public HTTPHeader(byte[] ByteHTTPRequest) {  string HTTPRequest = encoding.GetString(ByteHTTPRequest);  try  {   int IndexHeaderEnd;   string Header;   // Si la taille de requête est supérieur ou égale à 1460, alors toutes la chaine est l'entête http   if (HTTPRequest.Length <= 1460)    Header = HTTPRequest;   else   {    IndexHeaderEnd = HTTPRequest.IndexOf("/r/n/r/n");    Header = HTTPRequest.Substring(0, IndexHeaderEnd);    Data = ByteHTTPRequest.Skip(IndexHeaderEnd + 4).ToArray();   }   HTTPHeaderParse(Header);  }  catch (Exception)  { } } #endregion #region METHODES private void HTTPHeaderParse(string Header) {  #region HTTP HEADER REQUEST & RESPONSE  HTTPHeaderField HHField;  string HTTPfield, buffer;  int Index;  foreach (int IndexHTTPfield in Enum.GetValues(typeof(HTTPHeaderField)))  {   HHField = (HTTPHeaderField)IndexHTTPfield;   HTTPfield = "/n" + HHField.ToString().Replace('_', '-') + ": "; //Ajout de /n devant pour éviter les doublons entre cookie et set_cookie   // Si le champ n'est pas présent dans la requête, on passe au champ suivant   Index = Header.IndexOf(HTTPfield);   if (Index == -1)    continue;   buffer = Header.Substring(Index + HTTPfield.Length);   Index = buffer.IndexOf("/r/n");   if (Index == -1)    m_StrHTTPField[IndexHTTPfield] = buffer.Trim();   else    m_StrHTTPField[IndexHTTPfield] = buffer.Substring(0, Index).Trim();   //Console.WriteLine("Index = " + IndexHTTPfield + " | champ = " + HTTPfield.Substring(1) + " " + m_StrHTTPField[IndexHTTPfield]);  }  // Affichage de tout les champs  /*for (int j = 0; j < m_StrHTTPField.Length; j++)  {   HHField = (HTTPHeaderField)j;   Console.WriteLine("m_StrHTTPField[" + j + "]; " + HHField + " = " + m_StrHTTPField[j]);  }  */  #endregion } #endregion}

編寫以下代碼以實現解析文件:

class Program{ static void Main(string[] args) {  SRART: Console.WriteLine("輸入待解析的HTTP報文數據文件完整路徑:");  var filename = Console.ReadLine();  try  {   FileStream fs = new FileStream(filename, FileMode.Open);   BinaryReader br = new BinaryReader(fs);   var data = br.ReadBytes((int)fs.Length);   var header = new HTTPHeader(data);   var x = 0;   foreach (var f in header.HTTPField)   {    if (!String.IsNullOrEmpty(f))    {     Console.WriteLine($"[{x:00}] - {(HTTPHeaderField) x} : {f}");    }    x++;   }   Console.WriteLine($"總數據尺寸{fs.Length}字節,實際數據尺寸{header.Data.Length}字節");   Console.WriteLine(Encoding.UTF8.GetString(header.Data));   Console.WriteLine();   br.Close();   fs.Close();    }  catch (Exception e)  {   Console.WriteLine(e);  }  goto SRART; }}

這里還未實現gzip解壓縮和字符解碼,直接用UTF8解碼輸出的。(需要時再寫吧,都是體力活兒~)

效果圖展示:

下面的圖是沒有經過gzip壓縮過的數據。

以上就是用C#如何解析http報文的全部內容,哪位大俠還有好的方法歡迎提出寶貴意見,喜歡大家喜歡以上內容所述。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文字幕视频| 91久久久亚洲精品| 久久视频国产精品免费视频在线| 欧美巨大黑人极品精男| 久久久久久综合网天天| 日韩国产欧美区| 欧美与欧洲交xxxx免费观看| 日韩久久精品电影| 97在线观看免费| 深夜精品寂寞黄网站在线观看| 亚洲人成电影在线观看天堂色| 日本三级韩国三级久久| 国产精品网红福利| 在线播放日韩专区| 日韩中文字幕网址| 国产伦精品免费视频| 热99久久精品| 欧美裸体男粗大视频在线观看| x99av成人免费| 国产香蕉精品视频一区二区三区| 国产激情视频一区| 久久不射热爱视频精品| 97精品视频在线观看| 国产精品久久电影观看| 国语自产精品视频在线看一大j8| 韩国精品美女www爽爽爽视频| 欧美极度另类性三渗透| 国产精自产拍久久久久久蜜| 日本人成精品视频在线| 日韩电影大全免费观看2023年上| 欧美在线视频观看| 亚洲图片制服诱惑| 精品久久久久久久久久久久久| 亚洲伊人久久综合| 亚洲午夜精品久久久久久久久久久久| 国产精品一区二区av影院萌芽| 亚洲97在线观看| 亚洲精品国产精品国自产观看浪潮| 国产一区深夜福利| 欧美日韩亚洲国产一区| 欧美中文字幕在线观看| 久久久国产精彩视频美女艺术照福利| 成人午夜一级二级三级| 国产日韩一区在线| 992tv在线成人免费观看| 77777亚洲午夜久久多人| 国产一区二区三区在线免费观看| 日韩欧美第一页| 国产不卡精品视男人的天堂| 亚洲影院在线看| 欧美黄色免费网站| 性欧美亚洲xxxx乳在线观看| 亚洲理论片在线观看| 国产成人av网址| 欧美丰满片xxx777| 欧美日韩国产精品| 国产香蕉一区二区三区在线视频| 最新国产精品拍自在线播放| 色婷婷亚洲mv天堂mv在影片| 亚洲三级免费看| 操日韩av在线电影| 欧美成人免费全部观看天天性色| …久久精品99久久香蕉国产| 日韩精品在线观看一区| 欧美精品中文字幕一区| 不卡av电影在线观看| 在线观看视频亚洲| 亚洲japanese制服美女| 欧美激情视频在线观看| 久久国产精品亚洲| 国产精品入口日韩视频大尺度| 日韩精品免费一线在线观看| 久久夜色精品国产| 国产婷婷成人久久av免费高清| 国产精品久久久久久久午夜| 欧美性开放视频| 久久99视频精品| 日韩电影大全免费观看2023年上| 欧美与欧洲交xxxx免费观看| 国产精品91在线| 亚洲黄色www网站| 欧美激情网站在线观看| 国产午夜精品理论片a级探花| 久久久久久久91| 国产亚洲欧美视频| 中文字幕亚洲精品| 17婷婷久久www| 久久久久久有精品国产| 国内精品一区二区三区| 欧美另类69精品久久久久9999| 亚洲va欧美va国产综合久久| 欧美激情在线观看| 欧美成aaa人片在线观看蜜臀| 九九综合九九综合| 亚洲国产私拍精品国模在线观看| 亚洲精品国产综合久久| 欧美夫妻性生活视频| 日韩在线观看免费| 久久免费成人精品视频| 国产一区二区三区视频| 欧美国产激情18| 韩日欧美一区二区| 夜夜嗨av一区二区三区四区| 欧美男插女视频| 日韩黄色av网站| 亚洲欧洲一区二区三区在线观看| 亚洲欧美日韩一区二区在线| 中文字幕不卡av| 亚洲亚裔videos黑人hd| 欧美电影免费播放| 色中色综合影院手机版在线观看| 最好看的2019年中文视频| 日韩免费av片在线观看| 最近2019好看的中文字幕免费| 国产91成人video| 国产精品久久久久久久久久久不卡| 国产精品免费久久久| 97精品国产91久久久久久| 国产亚洲欧美日韩美女| 在线观看国产精品淫| 九九热r在线视频精品| 米奇精品一区二区三区在线观看| 国产精品入口免费视频一| 国产69久久精品成人看| 亚洲色图欧美制服丝袜另类第一页| 久久久91精品| 欧美国产视频日韩| 亚洲国产天堂久久综合网| 日韩视频一区在线| 91午夜理伦私人影院| 亚洲黄在线观看| 亚洲一区www| 亚洲成人精品视频在线观看| 国产精品入口尤物| 国产精品专区h在线观看| 一区二区三区www| 日韩在线免费视频| 日韩成人在线免费观看| 一区二区亚洲欧洲国产日韩| 亚洲白虎美女被爆操| 久久久久国色av免费观看性色| 久久国产精品偷| 欧美成人免费一级人片100| 欧美超级乱淫片喷水| 九九久久精品一区| 欧美日韩亚洲系列| 在线播放日韩精品| 中文字幕欧美日韩| 久久久久国色av免费观看性色| 国产日韩欧美视频在线| 成人黄色免费看| 91免费高清视频| 国产91精品久久久久| 欧美专区福利在线| 精品女厕一区二区三区| 亚洲福利视频网| 中文字幕亚洲无线码a| 57pao精品| 日韩成人xxxx| 色综合老司机第九色激情| 亚洲精品999| 亚洲欧洲日产国码av系列天堂| 亚洲欧美国产日韩天堂区| 亚洲一品av免费观看|