我想实现的是:
通过登录页面
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);//如不成功,会显示登录失败