分享

WebClient 保持 Session 和 Cookie

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多