zoukankan      html  css  js  c++  java
  • .NET 中使用 HttpWebResponse 时 Cookie 的读取

    今天把一个网站登录配置到以前写的蜘蛛程序中,发现不能成功登录。检查后才发现,那个网站在登录成功后,输出了一个特殊路径的 Cookie,由于是使用 HttpWebRequest.Cookies 来获取的 Cookie,默认是获得当前路径相关的 Cookie,里面少了那个特殊的 Cookie,查了半天资料,也没有一个好的解决办法。最后采用 HttpWebResponse.Headers["Set-Cookie"] 来获得所有的 Cookie 字符串,然后写一段代码把这些 Cookie 字符串转换到 CookieCollection 中,解决了问题,以下是部分代码:

         #region 读取 Cookie
         string strCookie=myWebResponse.Headers["Set-Cookie"];
         AddCookieWithCookieHead(CookieCol,strCookie,uri.Host);
         #endregion

      #region 从包含多个 Cookie 的字符串读取到 CookieCollection 集合中
      private static void AddCookieWithCookieHead(CookieCollection cookieCol,string cookieHead,string defaultDomain)
      {
       if(cookieHead==null)return;
       string[] ary=cookieHead.Split(';');
       for(int i=0;i   for(int i=0;i   {
        Cookie ck=GetCookieFromString(ary[i].Trim(),defaultDomain);
        if(ck!=null)
        {
         cookieCol.Add(ck);
        }
       }
      }
      #endregion
      #region 读取某一个 Cookie 字符串到 Cookie 变量中
      private static Cookie GetCookieFromString(string cookieString,string defaultDomain)
      {
       string[] ary=cookieString.Split(',');
       Hashtable hs=new Hashtable();
       for(int i=0;i   {
        string s=ary[i].Trim();
        int index=s.IndexOf("=");
        if(index>0 && index    {
         hs.Add(s.Substring(0,index),s.Substring(index+1));
        }
       }
       Cookie ck=new Cookie();
       foreach(object Key in hs.Keys)
       {
        if(Key.ToString()=="path")ck.Path=hs[Key].ToString();

        else if(Key.ToString()=="expires")
        {
         //ck.Expires=DateTime.Parse(hs[Key].ToString();
        }
        else if(Key.ToString()=="domain")ck.Domain=hs[Key].ToString();
        else
        {
         ck.Name=Key.ToString();
         ck.Value=hs[Key].ToString();
        }
       }
       if(ck.Name=="")return null;
       if(ck.Domain=="")ck.Domain=defaultDomain;
       return ck;
      }
      #endregion

  • 相关阅读:
    SharePoint 2013 安装.NET Framework 3.5 报错
    SharePoint 2016 配置工作流环境
    SharePoint 2016 站点注册工作流服务报错
    Work Management Service application in SharePoint 2016
    SharePoint 2016 安装 Cumulative Update for Service Bus 1.0 (KB2799752)报错
    SharePoint 2016 工作流报错“没有适用于此应用程序的地址”
    SharePoint 2016 工作流报错“未安装应用程序管理共享服务代理”
    SharePoint JavaScript API in application pages
    SharePoint 2016 每天预热脚本介绍
    SharePoint 无法删除搜索服务应用程序
  • 原文地址:https://www.cnblogs.com/zhwl/p/3158056.html
Copyright © 2011-2022 走看看