Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Web;
- using System.Net;
- public class WebClientEx : WebClient
- {
- public WebClientEx(CookieContainer container)
- {
- this.container = container;
- }
- public CookieContainer CookieContainer
- {
- get { return container; }
- set { container = value; }
- }
- private CookieContainer container = new CookieContainer();
- protected override WebRequest GetWebRequest(Uri address)
- {
- WebRequest r = base.GetWebRequest(address);
- var request = r as HttpWebRequest;
- if (request != null)
- {
- request.AllowAutoRedirect = true;
- request.CookieContainer = container;
- }
- return r;
- }
- protected override WebResponse GetWebResponse(WebRequest request, IAsyncResult result)
- {
- WebResponse response = base.GetWebResponse(request, result);
- ReadCookies(response);
- return response;
- }
- protected override WebResponse GetWebResponse(WebRequest request)
- {
- WebResponse response = null;
- try
- {
- response = base.GetWebResponse(request);
- }
- catch (Exception err)
- {
- if (err.GetType() == typeof(WebException))
- {
- response = ((WebException)err).Response as HttpWebResponse;
- }
- }
- ReadCookies(response);
- return response;
- }
- public void BugFix_CookieDomain()
- {
- Type _ContainerType = typeof(CookieContainer);
- Hashtable table = (Hashtable)_ContainerType.InvokeMember("m_domainTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance, null, container, new object[] { });
- ArrayList keys = new ArrayList(table.Keys);
- foreach (string keyObj in keys)
- {
- string key = (keyObj as string);
- if (key[0] == '.')
- {
- string newKey = key.Remove(0, 1);
- table[newKey] = table[keyObj];
- }
- }
- }
- private void ReadCookies(WebResponse r)
- {
- var response = r as HttpWebResponse;
- if (response != null)
- {
- CookieCollection cookies = response.Cookies;
- //container.Add(cookies);
- container.Add(r.ResponseUri, cookies);
- BugFix_CookieDomain();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement