如何解析set-cookie报头中的名称-值对?

本文关键字:值对 何解析 set-cookie 报头 | 更新日期: 2023-09-27 18:05:27

我正在寻找一种干净的方法来解析出2个变量从set-cookie头在httpwebrequest对象。

Set-Cookie报头中的字符串如下:

X-Mapping-dmogknml=6652DD088AB10EE6A65DD9C700872364;
path=/,ASP.NET_SessionId=f4jg1h55eoqbdk452blsozfl; path=/;
HttpOnly,id=111,status=rejected; expires=Thu, 21-Mar-2013 07:31:55 GMT; path=/,statusDes=
Validation Failed ; expires=Thu, 21-Mar-2013 07:31:55 GMT; path=/,X-Mapping
dmogknml=dmogknml=6652DD088AB10EE6A65DD9C700872; path=/

我基本上想解析出"拒绝"从"状态=拒绝"answers"验证失败"从"状态des =验证失败"到2字符串变量。我已经在脑海中想出了两个解决方案,但它们看起来有点笨拙:

  1. 循环和分割";",然后分割",",然后分割"="。
  2. 使用substring

请建议。

如何解析set-cookie报头中的名称-值对?

您可以使用Split的过载来获取Char的集合。

 var values = theCookie.Split(new [] {';', ',', '='}, 
                              StringSplitOptions.RemoveEmptyEntries);

然后您可以一次两次遍历values,查找键以获取值,或者您可以先转换为字典(使用LINQ ToDictionary)。

尝试使用正则表达式。

应该这样做(VB代码):

Dim Pattern As String = "status=(?<Status>.*?);.*?statusDes=(?<StatusDes>.*?);"
Dim m As Match = Regex.Match(input:=MyData, pattern:=Pattern , options:=RegexOptions.IgnoreCase + RegexOptions.Singleline)
Dim Status as String
Dim StatusDes as String
    Status = m.Groups("Status").ToString
    StatusDes = m.Groups("StatusDes").ToString

请记住导入Imports System.Text.RegularExpressions

希望这对你有帮助!