zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    IOS动态类型isKindOfClass, isMemberOfClass
    IOS-sqlite3数据库: create table数据库表及对数据库表的增删改查(create/insert/delete)
    TCP/UDP区别
    IOS中的NSData和NSFileManager例子微解
    IOS TableView的Delegate Methods-tableView didSelectRowAtIndexPath
    IOS IPA打包和真机测试
    使用autolayout的NSLayoutConstraint类中的constraintWithItem 、constraintsWithVisualFormat这两个类方法来创建视图并可以实现自动布局
    自定义圆形进度条
    通过cagradientLayer类封装uiimageview动画色度差
    通过CAGradientLayer类实现色度差动画
  • 原文地址:https://www.cnblogs.com/anjou/p/1206832.html
Copyright © 2011-2022 走看看