在header中拆分Cookie

本文关键字:Cookie 拆分 header | 更新日期: 2023-09-27 18:04:32

我在header中有以下cookie

饼干:ASP.NET_SessionId = cm3bg4muwin1vmbovc1esjy3;主机= SCANDICWEB101;ieAlertDisplay = true;scandic_lb_cookie = 1702298890.0.0000;s_sv_sid = 110733906247;

这是我获取第一个

的代码
var sessionId = webResponse.Headers["Set-Cookie"].Split(';')
                   .First(s => s.StartsWith("ASP.NET_SessionId="));

我试着得到host, scandic_lb_cookie和其余的,以及,但我找不到一个方法去做,你能给我一些建议吗?

在header中拆分Cookie

可能有更快的解决方案,但以下应该有效:

string source = cookie.Substring(8); // remove the "Cookie: "
var parts = source.Split(';')
                .Where(i => i.Contains("=")) // filter out empty values
                .Select(i => i.Trim().Split('=')) // trim to remove leading blank
                .Select(i => new { Name = i.First(), Value = i.Last() });

那么你可以这样使用它们:

foreach(var val in parts)
{
    string name = val.Name;
    string value = val.Value;
}

或者如果你喜欢它作为Dictionary<string, string>:

string source = coockie.Substring(8); // remove the "Cookie: "
var parts = source.Split(';')
                .Where(i => i.Contains("="))
                .Select(i => i.Trim().Split('='))
                .ToDictionary(i => i.First(), i => i.Last());

string host = parts["host"];
查看完整的LINQPad示例

您应该能够遍历cookie属性。检查HttpWebResponse Cookie属性以及如何在MSDN上获取和设置Cookie。不需要做任何复杂的字符串操作。

    private void ReadCookies()
    {
        HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://gmail.com");
        request.CookieContainer = new CookieContainer();
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        //Console.WriteLine(response.Headers.ToString());
        //Console.WriteLine(response.StatusCode.GetHashCode());
        CookieCollection IncomingCookies = response.Cookies;
        Console.WriteLine("Listing out {0} cookies received.", IncomingCookies.Count);
        foreach(Cookie cookie in IncomingCookies)
        {
            Console.WriteLine("{0} = {1}", cookie.Name, cookie.Value);
        }
        return;
    }

这个呢:

var sessionId = webResponse.Headers["Set-Cookie"]
    .Split(';')
    .Where(s => s.StartsWith("scandic_lb_cookie="));