How to get cookies info inside of a CookieContainer? (All Of Them, Not For A Specific Domain)

后端 未结 6 1568
野性不改
野性不改 2020-12-09 09:48

Please see the code below:

CookieContainer cookieJar = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(\"http://www.g         


        
6条回答
  •  盖世英雄少女心
    2020-12-09 10:42

    Here's an Extension that combines antfx's code with Adrian Lopez's idea of using both http and https. Just a quick fix for anyone who might find it useful:

    public static class CookieContainerExtensions
    {
        public static List List(this CookieContainer container)
        {
            var cookies = new List();
    
            var table = (Hashtable)container.GetType().InvokeMember("m_domainTable",
                                                                    BindingFlags.NonPublic |
                                                                    BindingFlags.GetField |
                                                                    BindingFlags.Instance,
                                                                    null,
                                                                    container,
                                                                    new object[] { });
    
            foreach (var key in table.Keys)
            {
                var domain = key as string;
    
                if (domain == null)
                    continue;
    
                if (domain.StartsWith("."))
                    domain = domain.Substring(1);
    
                var httpAddress = string.Format("http://{0}/", domain);
                var httpsAddress = string.Format("https://{0}/", domain);
    
                if (Uri.TryCreate(httpAddress, UriKind.RelativeOrAbsolute, out var httpUri))
                {
                    foreach (Cookie cookie in container.GetCookies(httpUri))
                    {
                        cookies.Add(cookie);
                    }
                }
                if (Uri.TryCreate(httpsAddress, UriKind.RelativeOrAbsolute, out var httpsUri))
                {
                    foreach (Cookie cookie in container.GetCookies(httpsUri))
                    {
                        cookies.Add(cookie);
                    }
                }
            }
    
            return cookies;
        }
    }
    

提交回复
热议问题