遠程抓取模擬Cookie

 我想實現的是:

通過登錄頁面
http://china.alibaba.com/member/signin.htm
登錄後抓取下面這個頁面
http://china.alibaba.com/member/myalibaba.htm?ca=true

可是不行啊。。。。但是我同樣的程序抓其他站點的頁面是可以的。
爲什麼這個不行啊。。。。

我的代碼如下:
string url = "http://china.alibaba.com/member/signin.htm";
   System.Net.HttpWebRequest req=(System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url); 
   req.CookieContainer =new CookieContainer ();
   
   req.Method="POST";//POST方式請求
   req.ContentType= "application/x-www-form-urlencoded";//內容類型
   req.Headers["charset"] = "GBK";
   req.Headers["TransferEncoding"] = "chunked";
 
        
   
   //參數經過URL編碼
   string paraUrlCoded;
   paraUrlCoded=System.Web.HttpUtility.UrlEncode("LoginId") +"="+System.Web.HttpUtility.UrlEncode("guanggao250");
   paraUrlCoded=paraUrlCoded+"&";  
   paraUrlCoded=paraUrlCoded+System.Web.HttpUtility.UrlEncode("Password")+"="+System.Web.HttpUtility.UrlEncode("a123456");
   paraUrlCoded=paraUrlCoded+"&";  
   paraUrlCoded=paraUrlCoded+System.Web.HttpUtility.UrlEncode("action")+"="+System.Web.HttpUtility.UrlEncode("Signin");
   paraUrlCoded=paraUrlCoded+"&";  
   paraUrlCoded=paraUrlCoded+System.Web.HttpUtility.UrlEncode("eventSubmit_doPost")+"="+System.Web.HttpUtility.UrlEncode("anywhere");
   paraUrlCoded=paraUrlCoded+"&";  
   paraUrlCoded=paraUrlCoded+System.Web.HttpUtility.UrlEncode("Done")+"="+System.Web.HttpUtility.UrlEncode("");

   

   //將URL編碼後的字符串轉化爲字節
   byte[] payload;
   //payload=System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
   payload=System.Text.Encoding.Default.GetBytes(paraUrlCoded);
   req.ContentLength=payload.Length; //設置請求的ContentLength 
   System.IO.Stream writer=req.GetRequestStream();//獲得請求流 
   writer.Write(payload,0,payload.Length);//將請求參數寫入流
   writer.Close();//關閉請求流

   //獲得響應流
   System.Net.HttpWebResponse response=(System.Net .HttpWebResponse)req.GetResponse();
   System.Net.CookieCollection retCookie = response.Cookies ;
 
   System.IO.Stream ss=response.GetResponseStream();
   StreamReader firstreader = new StreamReader(ss,System.Text .Encoding.Default);
   String firstrespHTML = firstreader.ReadToEnd();
 
   Response.Write("<br>---------------------------------1-------------------------------<br>");

   string temp   =   response.Headers["Set-Cookie"].ToString();//GetHeader("Set-Cookie")  
   Response.Write(temp);

   Response.Write("<br>---------------------------------2-------------------------------<br>");
   foreach (Cookie cook in retCookie)
   {
    Console.WriteLine("Cookie:");
    Response.Write( cook.Name + " = " + cook.Value);
   }

   //retCookie = temp
   Response.Write("<br>---------------------------------3-------------------------------<br>");
   
   ///////////////////////////////////////////////////////////////
   string urlagain= "http://china.alibaba.com/member/myalibaba.htm?ca=true"; 
   //生成請求
   System.Net.HttpWebRequest reqagain=(HttpWebRequest)WebRequest.Create (urlagain);
   CookieContainer againCookie =new  CookieContainer ();

   foreach(System.Net.Cookie c in retCookie)
   {
    c.Domain= ".alibaba.com";
   }
   System.Uri uri = new System.Uri("http://www.alibaba.com");
   Response.Write( uri.ToString() +"*********************************<br>");
   againCookie.SetCookies(uri,temp.Replace("Domain=china.alibaba.com;",""));//Add(retCookie);
   reqagain.CookieContainer = againCookie;
   
   response=(System.Net .HttpWebResponse)reqagain.GetResponse();
   System.IO.Stream s=response.GetResponseStream();
   StreamReader reader = new StreamReader(s,System.Text .Encoding.UTF8);
   String respHTML = reader.ReadToEnd();
   //顯示提示內容
   
   System.Net.CookieCollection sCookie = response.Cookies ;
   
   foreach (Cookie cook in sCookie)
   {
    Response.Write( cook.Name + " = " + cook.Value);
   }

   //   string temp1   =   response.Headers["Set-Cookie"].ToString();//GetHeader("Set-Cookie")  
   //   Response.Write(temp1);

   Response.Write("<br>----------------------------------4------------------------------<br>");
   Response.Write(respHTML);//如不成功,會顯示登錄失敗

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章