我想實現的是:
通過登錄頁面
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);//如不成功,會顯示登錄失敗