有些朋友说 WebClient 不能保持 Session 和 Cookie,只有 HttpWebRequest 才能保持 Session。实际上我们只要重写 WebClient 的 GetWebRequest 方法就可以使 WebClient 保持 Session 和 Cookie。 下面是 HttpClient 类, 它继承自 WebClient,并重写了 GetWebRequest 方法。关键是要定义一个 Cookie 容器(红色代码部分): /// <summary>
/// 支持 Session 和 Cookie 的 WebClient。 /// </summary> public class HttpClient : WebClient { // Cookie 容器 private CookieContainer cookieContainer; /// <summary> /// 创建一个新的 WebClient 实例。 /// </summary> public HttpClient() { this.cookieContainer = new CookieContainer(); } /// <summary> /// 创建一个新的 WebClient 实例。 /// </summary> /// <param name="cookie">Cookie 容器</param> public HttpClient(CookieContainer cookies) { this.cookieContainer = cookies; } /// <summary> /// Cookie 容器 /// </summary> public CookieContainer Cookies { get { return this.cookieContainer; } set { this.cookieContainer = value; } } /// <summary> /// 返回带有 Cookie 的 HttpWebRequest。 /// </summary> /// <param name="address"></param> /// <returns></returns> protected override WebRequest GetWebRequest(Uri address) { WebRequest request = base.GetWebRequest(address); if (request is HttpWebRequest) { HttpWebRequest httpRequest = request as HttpWebRequest; httpRequest.CookieContainer = cookieContainer; } return request; } 封装了PostData, GetSrc 和 GetFile 方法 } |
|