Richard Lemmens website

Copyright:
PublicDomain
This text content and maps on this page are in the public domain. This means you are free to copy, adapt, share, distribute and even capitalize on it.

Cookie aware WebClient

Microsoft's .NET WebClient class is a useful thingy. Too bad that is unaware of cookies. This can be easily amended by subclassing and expanding it:

		
namespace myNamespace
{
    /// <summary>
    /// Subclass of WebClient that can handle cookies.
    /// </summary>
    public class CookieAwareWebClient : System.Net.WebClient
    {
        /// <summary>
        /// Gets or sets the cookies.
        /// </summary>
        public System.Net.CookieContainer CookieContainer { get; set; }

        /// <summary>
        /// Gets or sets the URI.
        /// </summary>
        public System.Uri Uri { get; set; }

        /// <summary>
        /// Creates a new instance of the CookieAwareWebClient class without cookies.
        /// </summary>
        public CookieAwareWebClient()
            : this(new System.Net.CookieContainer())
        { }

        /// <summary>
        /// Creates a new instance of the CookieAwareWebClient class with cookies.
        /// </summary>
        public CookieAwareWebClient(System.Net.CookieContainer cookies)
        {
            this.CookieContainer = cookies;
        }

        /// <summary>
        /// Creates a WebRequest object for a resource.
        /// </summary>
        /// <param name="address">URI of the resource</param>
        /// <returns>WebRequest object</returns>
        protected override System.Net.WebRequest GetWebRequest(System.Uri address)
        {
            System.Net.WebRequest request = base.GetWebRequest(address);
            if (request is System.Net.HttpWebRequest)
            {
                (request as System.Net.HttpWebRequest).CookieContainer = this.CookieContainer;
            }
            System.Net.HttpWebRequest httpRequest = (System.Net.HttpWebRequest) request;
            httpRequest.AutomaticDecompression = System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate;
            return httpRequest;
        }

        // To process response cookies, override the GetWebResponse method too
    }
}