Advertisement
Kirito94

WebClientEx

Jan 11th, 2016
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.85 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Web;
  8. using System.Net;
  9.  
  10.     public class WebClientEx : WebClient
  11.     {
  12.         public WebClientEx(CookieContainer container)
  13.         {
  14.             this.container = container;
  15.         }
  16.  
  17.         public CookieContainer CookieContainer
  18.         {
  19.             get { return container; }
  20.             set { container = value; }
  21.         }
  22.  
  23.         private CookieContainer container = new CookieContainer();
  24.  
  25.         protected override WebRequest GetWebRequest(Uri address)
  26.         {
  27.             WebRequest r = base.GetWebRequest(address);
  28.             var request = r as HttpWebRequest;
  29.  
  30.             if (request != null)
  31.             {
  32.                 request.AllowAutoRedirect = true;
  33.                 request.CookieContainer = container;
  34.             }
  35.             return r;
  36.         }
  37.  
  38.         protected override WebResponse GetWebResponse(WebRequest request, IAsyncResult result)
  39.         {
  40.             WebResponse response = base.GetWebResponse(request, result);
  41.             ReadCookies(response);
  42.             return response;
  43.         }
  44.  
  45.         protected override WebResponse GetWebResponse(WebRequest request)
  46.         {
  47.             WebResponse response = null;
  48.  
  49.             try
  50.             {
  51.                 response = base.GetWebResponse(request);
  52.             }
  53.             catch (Exception err)
  54.             {
  55.                 if (err.GetType() == typeof(WebException))
  56.                 {
  57.                     response = ((WebException)err).Response as HttpWebResponse;
  58.                 }
  59.             }
  60.  
  61.             ReadCookies(response);
  62.             return response;
  63.         }
  64.  
  65.         public void BugFix_CookieDomain()
  66.         {
  67.             Type _ContainerType = typeof(CookieContainer);
  68.             Hashtable table = (Hashtable)_ContainerType.InvokeMember("m_domainTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance, null, container, new object[] { });
  69.  
  70.             ArrayList keys = new ArrayList(table.Keys);
  71.  
  72.             foreach (string keyObj in keys)
  73.             {
  74.                 string key = (keyObj as string);
  75.                 if (key[0] == '.')
  76.                 {
  77.                     string newKey = key.Remove(0, 1);
  78.                     table[newKey] = table[keyObj];
  79.                 }
  80.             }
  81.         }
  82.  
  83.         private void ReadCookies(WebResponse r)
  84.         {
  85.             var response = r as HttpWebResponse;
  86.             if (response != null)
  87.             {
  88.                 CookieCollection cookies = response.Cookies;
  89.                 //container.Add(cookies);
  90.                 container.Add(r.ResponseUri, cookies);
  91.                 BugFix_CookieDomain();
  92.             }
  93.         }
  94.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement