2013-02-25 277 views
0

在大家都不滿之前,這已被回答。我在網上搜尋瞭如何做到這一點,並嘗試了很多方法。 Login to website, via C#How to programmatically log in to a website to screenscape?這兩個都很有幫助,但我無法弄清楚爲什麼我無法通過登錄頁面。這裏是我的代碼:使用C登錄網站#

string url = "https://www.advocare.com/login.aspx"; 
string url2 = "https://url.after.login"; 
HttpWebRequest wReq = WebRequest.Create(url) as HttpWebRequest; 
wReq.KeepAlive = true; 
wReq.Method = "POST"; 
wReq.AllowAutoRedirect = false; 
wReq.ContentType = "application/x-www-form-urlencoded"; 
string postData = "ctl00$cphContent$txtUserName=Username&ctl00$cphContent$txtPassword=Password"; 
byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(postData); 
wReq.ContentLength = dataBytes.Length; 
using (Stream postStream = wReq.GetRequestStream()) 
{ 
    postStream.Write(dataBytes, 0, dataBytes.Length); 
} 
HttpWebResponse wResp = wReq.GetResponse() as HttpWebResponse; 
string pageSource; 
wReq = WebRequest.Create(url2) as HttpWebRequest; 
wReq.CookieContainer = new CookieContainer(); 
wReq.CookieContainer.Add(wResp.Cookies); 
HttpWebResponse wResp2 = wReq.GetResponse() as HttpWebResponse; 
using (StreamReader sr = new StreamReader(wResp2.GetResponseStream())) 
{ 
    pageSource = sr.ReadToEnd(); 
} 

每當我看到pageSource它是login.aspx頁面的HTML。我必須在這裏錯過一些東西。也許它沒有拿餅乾,我不知道。我有一個問題,爲什麼不工作,是在字符串postData =「」。那些假設是html標籤的名稱或id部分?任何幫助,這是非常讚賞,因爲我很難過,並且將不得不找到一種不同的方式。我想繼續使用WebRequestWebResponse,而不是使用WebBrowser。如果我不能,那好吧。再次感謝任何幫助!

+0

@Fastlink - 好吧,在發送發佈數據之前,你需要做一個獲取請求bcoz「VIEWSTATE」是發送到發佈數據 – 2013-02-25 04:48:32

回答

0

除了登錄,你還想做什麼?如果它像編程的網站QAing,我會建議使用硒和創建一個C#應用程序的基礎上。如果你想我可以發佈一個基於硒項目的基礎項目的鏈接。

+0

簡單地說,我需要到登錄後面幾頁,抓取頁面,加載將數據刮入數據庫,以便用戶可以搜索數據庫 – Fatstink 2013-02-25 04:40:29

0

不一定要查看頁面源,但看看實際的HTTP POST。安裝一個HTTP代理(如Fiddler),然後重新訪問您嘗試模擬的頁面。完成HTTP POST請求,並檢查代理中產生的結果。從那裏你可以看到正在傳遞的實際參數,cookie,頭文件等,然後你可以嘗試在你的代碼中複製它。當簡單地查看HTML源代碼時錯過某些東西通常很容易,但監控網絡流量非常簡單。