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:
上面的c#使用GET方法來訪問,我用POST方法用一些頭文件來訪問,結果是一樣的。
代碼應該沒問題,我已經改變了另一個網站的URL登錄,我可以得到正確的Cookie。所以我想它的JavaScript問題,我怎樣才能得到它與C#?
請隨時用密碼登錄/測試用戶名&,此帳戶僅供測試。
任何想法是讚賞! 謝謝!
感謝您的重播。我已經做到了,轉換document.cookie ='.. js cookie string'。到cookie字符串,並將其用作下一個HTTP請求cookie,但它不能工作,顯示沒有登錄。其實,我需要使用CookieContainer對象,而不是Cookie字符串... – 2011-12-29 14:40:52
您是如何將cookie傳遞給下一個請求的?你有把這些cookies分配給CookieContainer嗎? – 2011-12-29 14:43:08
首先,將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