C#如何解析http报文

2019-12-26 13:12:28刘景俊

这篇文章如果讲解了用C#如何解析http报文,要解析http报文,需要哪些操作呢?下面小编给大家整理相关资料,需要的朋友可以参考下

下面通过一段内容有文字说明有代码分析,并附有展示图供大家学习。

要解析HTTP报文,需要实现以下操作:

读取HTTP报头提供的各种属性

分析属性值,从中获取内容编码和字符集编码

将报头数据和内容进行分离

判断内容是否文本还是二进制,如果是二进制的则不进行处理

如果内容是文本,按报头中提供的内容编码和字符集编码进行解压缩和解码

目前没有找到.Net框架内置的解析方法,理论上HttpClient等类在内部应该已经实现了解析,但不知为何没有公开这些处理方法。(亦或是我没找到)

那么只能自己来解析这些数据了。

我们先来看看这个经过gzip压缩的文本内容的HTTP报文:

C#如何解析http报文

这里提供一个老外写的简陋的解析类(已经过修改,原代码中存在一些严重BUG):

 

 
  1. public enum HTTPHeaderField  { 
  2. Accept = 0,  Accept_Charset = 1, 
  3. Accept_Encoding = 2,  Accept_Language = 3, 
  4. Accept_Ranges = 4,  Authorization = 5, 
  5. Cache_Control = 6,  Connection = 7, 
  6. Cookie = 8,  Content_Length = 9, 
  7. Content_Type = 10,  Date = 11, 
  8. Expect = 12,  From = 13, 
  9. Host = 14,  If_Match = 15, 
  10. If_Modified_Since = 16,  If_None_Match = 17, 
  11. If_Range = 18,  If_Unmodified_Since = 19, 
  12. Max_Forwards = 20,  Pragma = 21, 
  13. Proxy_Authorization = 22,  Range = 23, 
  14. Referer = 24,  TE = 25, 
  15. Upgrade = 26,  User_Agent = 27, 
  16. Via = 28,  Warn = 29, 
  17. Age = 30,  Allow = 31, 
  18. Content_Encoding = 32,  Content_Language = 33, 
  19. Content_Location = 34,  Content_Disposition = 35,