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
  • 相关阅读:
    MyBatis动态SQL语句
    MyBatis分页
    理解 Linux 的处理器负载均值
    Linux命令之du
    Linux命令之df
    Linux命令之lsof
    maven打包加时间戳
    多线程学习-ListenableFuture使用介绍以及示例
    Host is not allowed to connect to this MySQL server解决方法
    Dapper,大规模分布式系统的跟踪系统
  • 原文地址:https://www.cnblogs.com/anjou/p/1206832.html
Copyright © 2011-2022 走看看