2011-12-29 50 views
0

我正在做一個項目,通過C#登錄網站。 本網站的cookie由Javascript創建,我無法獲取。你有什麼想法? 只有logined後,我可以讀我的資源從該網站使用C#HttpWebRequest登錄網站後得到Cookie問題(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); 

其實,我需要cookiecontainer與正確的cookie,並把它作爲下一個請求容器,但這個CookieContainer餅乾計數是0.

PS:

  1. 上面的c#使用GET方法來訪問,我用POST方法用一些頭文件來訪問,結果是一樣的。

  2. 代碼應該沒問題,我已經改變了另一個網站的URL登錄,我可以得到正確的Cookie。所以我想它的JavaScript問題,我怎樣才能得到它與C#?

  3. 請隨時用密碼登錄/測試用戶名&,此帳戶僅供測試。

任何想法是讚賞! 謝謝!

回答

0

如果這個網站通過javascript設置它的cookie,我會建議你嘗試解析JavaScript中的C#並嘗試從中重建cookie。

+0

感謝您的重播。我已經做到了,轉換document.cookie ='.. js cookie string'。到cookie字符串,並將其用作下一個HTTP請求cookie,但它不能工作,顯示沒有登錄。其實,我需要使用CookieContainer對象,而不是Cookie字符串... – 2011-12-29 14:40:52

+0

您是如何將cookie傳遞給下一個請求的?你有把這些cookies分配給CookieContainer嗎? – 2011-12-29 14:43:08

+0

首先,將js字符串轉換爲C#字符串cookieHeader。然後var newRequest =(HttpWebRequest)WebRequest.Create(「newPostLink」); newRequest.CookieContainer =容器; newRequest.CookieContainer.SetCookies(newRequest.RequestUri,cookieHeader); PS:我覺得Converver JS NewDate()可能與Server時間不一樣,你怎麼看?謝謝 – 2011-12-29 14:54:20