好吧,我一直在這個單獨的太空中喋喋不休。即使花費了數小時在這個網站和其他網站上,我也無法破解它。登錄會話不使用WebRequest/Response傳輸到新網頁?
本質上,我試圖使用WebRequest/Response從LogIn頁面後面的網頁剝離一些數據。 (我已經得到了這個工作使用WebBrowser控件的一些分層事件導航到不同的網頁,但它試圖重構時造成一些問題 - 更不用說已經指出,使用隱藏窗體來完成這項工作是' 。不好的做法」)
這是我有:
string formParams = string.Format("j_username={0}&j_password={1}", userName, userPass);
string cookieHeader;
WebRequest request = WebRequest.Create(_signInPage);
request.ContentType = "text/plain";
request.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(formParams);
request.ContentLength = bytes.Length;
using (Stream os = request.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
}
WebResponse response = request.GetResponse();
cookieHeader = response.Headers["Set-Cookie"];
WebRequest getRequest = WebRequest.Create(sessionHistoryPage);
getRequest.Method = "GET";
getRequest.Headers.Add("Cookie", cookieHeader);
WebResponse getResponse = getRequest.GetResponse();
try
{
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
textBox1.AppendText(sr.ReadToEnd());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
到目前爲止,我能夠從第一鏈接到正確的頁面,但是當我去到第二,它發送我回到登錄頁面,就好像我沒有登錄。
問題可能在於cookie沒有獲得c正確抓住,但我是新手,所以也許我只是做錯了。它捕獲從POST發回的cookie:JSESSIONID和S2V,但是當我們使用FireFox WebConsole進入「GET」時,瀏覽器顯示它發送了JSESSIONID,S2V 和 SPRING_SECURITY_REMEMBER_ME_COOKIE,我相信這是使用的cookie當我點擊登錄表單上的「記住我」框。
我已經嘗試了許多不同的方式來使用SO的資源,但我還沒有到達需要的頁面。所以,爲了我已經離開的頭髮,我決定向好的SO尋求幫助。 (這是我不想放棄的東西之一 - 有時候會固執的那樣)
如果有人想要我登錄的網站的實際地址,我會更多而不願意通過私人信息將它發送給一對夫婦。
代碼,我要反映沃爾瑪建議答案:
var request = (HttpWebRequest)WebRequest.Create(sessionHistoryPage);
request.Credentials = new NetworkCredential(userName, userPass);
request.CookieContainer = new CookieContainer();
request.PreAuthenticate = true;
WebResponse getResponse = request.GetResponse();
try
{
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
textBox1.AppendText(sr.ReadToEnd());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
這個建議,至少我的方式來實現它,沒有奏效。
正如Krizz建議的那樣,我將代碼更改爲使用CookieContainer,並將cookie從一個請求傳輸到另一個請求,但響應只是讓我回到原始登錄頁面,就好像我沒有登錄一樣。
是否有某些網站不會允許此類行爲?
最終解決
最終的解決方案,提出了由阿德里安Iftode他說,我試圖登錄網站可能不允許有一個認證沒有一個有效的會話所以加入一個GET到該流程的開始允許我獲取該cookie。
感謝您的幫助!
實用建議GET提琴手http://fiddler2.com,看看標題您登錄後準確發送和接收您的瀏覽器,然後模仿那些在你的C#代碼。 @zespri我以前使用的提琴手和,說實話,在我當前的編程能力水平 – 2012-02-28 00:51:33
,這是在我的頭上。這是我正在處理的內容,但沒有多大幫助,我從FireFox Web控制檯獲得了相同的信息。 – Josh 2012-02-28 01:41:03