WebClient 保持 Session 和 Cookie

有些朋友说 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 方法
}

相关文章:使用WebClient自动填写并提交ASP.NET页面表单 
             使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie

posted on 2008-05-25 11:11  大豆男生  阅读(14398)  评论(12编辑  收藏  举报

导航