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
  • 相关阅读:
    CompletableFuture java 8新增加异步处理
    Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore , Condition
    怎么让一个不定宽高的div垂直水平居中?
    数组对象方法排序
    Webpack ERROR in Path must be a string. Received undefined
    es6 babel转码器安装配置及常见命令
    使用淘宝镜像cnpm安装Vue.js
    JS中的call()和apply()方法
    placeholder颜色更改
    typeof与js数据类型
  • 原文地址:https://www.cnblogs.com/anjou/p/1206832.html
Copyright © 2011-2022 走看看