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

后端 未结 6 1560
野性不改
野性不改 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:41

    Thank's to AppDeveloper for their answer, here is a slightly modified version as an extension method.

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Reflection;
    using System.Text;
    
    public static class CookieContainerExtension
    {
        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)
            {
    
                Uri uri = null;
    
                var domain = key as string;
    
                if (domain == null)
                    continue;
    
                if (domain.StartsWith("."))
                    domain = domain.Substring(1);
    
                var address = string.Format("http://{0}/", domain);
    
                if (Uri.TryCreate(address, UriKind.RelativeOrAbsolute, out uri) == false)
                    continue;
    
                foreach (Cookie cookie in container.GetCookies(uri))
                {
                    cookies.Add(cookie);
                }
            }
    
            return cookies;
        }
    }
    

    To get the list just call List() on the CookieContainer:

    CookieContainer cookies = new CookieContainer();
    cookies.Add(new Cookie("name1", "value1", "/", "www.domain1.com"));
    cookies.Add(new Cookie("name2", "value2", "/", "www.domain2.com"));
    List cookieList = cookies.List();
    

提交回复
热议问题