.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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM