我正在尝试从Set-Cookie标头解析多个Cookie,我尝试在网上寻找解决方案,但我很幸运。
这是我试图解析的标题字符串。
blacklisted_tags=; path=/,,locale=en; path=/,,login=UserName; path=/; expires=Thu, 04-May-2017 22:35:39 GMT,,pass_hash=06xdbf50dfddb67f04352673g85o2645d7399xv; path=/; expires=Thu, 04-May-2017 22:35:39 GMT,_session=BAh7CDoMdXNlcl9pZGkDgGMBOg9hi4X9W9uX2lkIiVhNTBmOWYxMWZmYWY4ZjE4MTc3NWUxZjEyZWNmNzU3ZCIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsGOgtub3RpY2UiGllvdSBhcmUgbm93IGxvZ2dlZCBpbgY6Kn7j4MkewY7CEY%3D--18f67a3aa5cd039a23521dbf8d6be84e2ad55vnd; domain=.website.com; path=/; HttpOnly
这就是fiddler解析它的方式
Set-Cookie: blacklisted_tags=; path=/
Set-Cookie:
Set-Cookie: locale=en; path=/
Set-Cookie:
Set-Cookie: login=UserName; path=/; expires=Mon, 17-Apr-2017 17:34:43 GMT
Set-Cookie:
Set-Cookie: pass_hash=06xdbf50dfddb67f04352673g85o2645d7399xv; path=/; expires=Mon, 17-Apr-2017 17:34:43 GMT
Set-Cookie: _session=BAh7CDoMdXNlcl9pZGkDgGMBOg9hi4X9W9uX2lkIiVhNTBmOWYxMWZmYWY4ZjE4MTc3NWUxZjEyZWNmNzU3ZCIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsGOgtub3RpY2UiGllvdSBhcmUgbm93IGxvZ2dlZCBpbgY6Kn7j4MkewY7CEY%3D--18f67a3aa5cd039a23521dbf8d6be84e2ad55vnd; domain=.website.com; path=/; HttpOnly
我已尝试过这种RegEx模式,但它无法正常工作
(.*?)=(.*?)($|;|,(?! ))
由于我对正则表达式不太满意,所以我希望有人能用正确的模式帮助我。
提前谢谢。
答案 0 :(得分:2)
如果你知道uri - 只需使用System.Net.CookieContainer
。解析cookie可能容易出错,但CookieContainer
可以为您完成。
答案 1 :(得分:0)
别介意我搞清楚了!
我编写了这个小函数,它将响应中的Set-Cookie标头作为参数,并返回给定cookie名称的值。
private string CookieValue(string header, string name)
{
Match M = Regex.Match(header, string.Format("{0}=(?<value>.*?);", name));
return (M.ToString().Split('=')[1]);
}
使用方法:
string passHash = CookieValue(Response.Headers[HttpResponseHeader.SetCookie], pass_hash);
如果您认为此功能出现问题,请分享您的想法。