使用C#HttpWebRequest登录网站后获取Cookie问题(Cookie由javascript生成)

时间:2011-12-29 14:02:32

标签: c# javascript httpwebrequest http-headers

我正在做一个用C#登录网站的项目。 这个网站的cookie是由Javascript创建的,我无法得到它。你有什么想法? 只有在登录后,我才能从该网站上阅读我需要的资源

-----以下是HTTPWebRequest返回的HTML内容-----

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <base href="http://passport.tianya.cn:80/" />
    <meta http-equiv="cache-control" content="no-cache" />
    <meta http-equiv="pragma" content="no-cache" />
    <meta http-equiv="expires" content="0" />
    <title>Loading......</title>
    <script>
      document.cookie='user=w=testAcount01&id=61847120&f=1;expires='+(new Date(new Date().getTime()+2592000*1000)).toGMTString()+';path=/;domain=tianya.cn';
      document.cookie='temp=k=715580387&s=&t=1324904085&b=270dc20704fefc75b56510d5b2c225c8&ct='+parseInt(new Date().getTime()/1000)+'&et=-1;path=/;domain=tianya.cn';
      document.cookie='sso=r=1789338886&sid=&wsid=E329680C729EA57FE7B913A7CB0EB42E;path=/;domain=tianya.cn';
      document.cookie='right=web4=n&portal=n;expires='+(new Date(new Date().getTime()+2592000*1000)).toGMTString()+';path=/;domain=tianya.cn';
      document.cookie='temp4=rm=;expires='+(new Date(new Date().getTime()+2592000*1000)).toGMTString()+';path=/;domain=tianya.cn';
    </script>
    <script type="text/javascript" src="http://passport.tianyaclub.com/domain.jsp?cookieTime=1324904085&portalValue=&rightCookie=false&rmCookieCode=&isActivatedUser=&idWriter=61847120&writer=testAcount01&intKey=715580387&chvSysGradeList=&sysGrade=&domain=tianyaclub.com&flag=b868a24deca81f10c73df39b92004b1c&rmCode=false&rmFlag=&wsid=E329680C729EA57FE7B913A7CB0EB42E&r=1789338886"></script>
    <script type="text/javascript" src="http://passport.hainan.net/domain.jsp?cookieTime=1324904085&portalValue=&rightCookie=false&rmCookieCode=&isActivatedUser=&idWriter=61847120&writer=testAcount01&intKey=715580387&chvSysGradeList=&sysGrade=&domain=hainan.net&flag=b868a24deca81f10c73df39b92004b1c&rmCode=false&rmFlag=&wsid=E329680C729EA57FE7B913A7CB0EB42E&r=1789338886"></script>
    <script type="text/javascript" src="http://passport.hiholiday.com/domain.jsp?cookieTime=1324904085&portalValue=&rightCookie=false&rmCookieCode=&isActivatedUser=&idWriter=61847120&writer=testAcount01&intKey=715580387&chvSysGradeList=&sysGrade=&domain=hiholiday.com&flag=b868a24deca81f10c73df39b92004b1c&rmCode=false&rmFlag=&wsid=E329680C729EA57FE7B913A7CB0EB42E&r=1789338886"></script>
  </head>
  <body>
    <script>
      location.href="http://my.tianya.cn";
    </script>
  </body>
</html> 

C#代码:

 CookieContainer container = new CookieContainer();
 string url = "http://passport.tianya.cn/login?vwriter=testAcount01&vpassword=123456abc";
        var request = (HttpWebRequest)WebRequest.Create(url);
        request.CookieContainer = container;

        request.BeginGetResponse(call =>
            {
                var httpRequest = (HttpWebRequest)call.AsyncState;
                var httpResponse = (HttpWebResponse)httpRequest.EndGetResponse(call);

                using (var stream = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var content = stream.ReadToEnd();
                }

            }, request);

实际上,我需要带有正确cookie的CookieContainer并将其作为下一个请求容器,但此CookieContainer Cookie计数为0.

PS:

  1. 上面的c#使用GET方法进行访问,我使用POST方法访问一些标题,结果是一样的。

  2. 代码应该没问题,我已经更改了另一个网站URL登录,我可以得到正确的Cookie。所以我猜它的Javascript问题,我怎么能用C#来搞定它?

  3. 请随时使用用户名&amp;登录/测试密码,此帐户仅用于测试。

  4. 任何想法都表示赞赏! 谢谢!

1 个答案:

答案 0 :(得分:0)

如果这些网站通过javascript设置其cookie,我建议您尝试解析C#中的javascript并尝试从中重构cookie。