远程抓取模拟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);//如不成功,会显示登录失败

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值