2014-01-16 107 views
0

我想通過使用Windows桌面應用程序登錄到網站setting.fun-freak.com,僅用於學習目的。我用的WebRequest,並試圖爲使用C#以編程方式登錄網站

string formUrl = "http://setting.fun-freak.com/Account/Login.aspx"; 
string formParams = string.Format("ctl00$MainContent$txtUserName=loginId&ctl00$MainContent$txtPassword=password"); 
string cookieHeader; 
WebRequest req = WebRequest.Create(formUrl); 
req.ContentType = "application/x-www-form-urlencoded"; 
req.Method = "POST"; 
byte[] bytes = Encoding.ASCII.GetBytes(formParams); 
req.ContentLength = bytes.Length; 
using (Stream os = req.GetRequestStream()) 
{ 
    os.Write(bytes, 0, bytes.Length); 
} 

using (StreamReader sr = new StreamReader(req.GetResponse())) 
{ 
    pageSource = sr.ReadToEnd(); 
} 

我認爲這pageSource對象將有下一個頁面的HTML後登錄頁面(如果登錄成功地),但它包含在返回相同的登錄頁面。

如何成功登錄本網站並獲得主頁的回覆?

此外,這(setting.fun-freak.com)我自己的網站,內置在asp.net webforms。這裏是按鈕點擊事件代碼(可能有助於挖掘問題)

UserContainer User = new UserProcessing().Authenticate(txtUserName.Text, txtPassword.Text); 
     if (User != null) 
     { 
      Session["User"] = User; 
      FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, RememberMe.Checked); 
     } 
     else 
     { 
      lblMessage.Text = "Invalid credentials. Please try again"; 
     } 

任何幫助將不勝感激。

回答

0

我添加了這段代碼,但它仍然無法正常工作。 它是從http://msdn.microsoft.com/en-us/library/debx8sh9.aspx

 // Create a request using a URL that can receive a post. 
     WebRequest request = WebRequest.Create("http://setting.fun-freak.com/Account/Login.aspx"); 
     // Set the Method property of the request to POST. 
     request.Method = "POST"; 
     // Create POST data and convert it to a byte array. 
     string postData = "ctl00$MainContent$txtUserName=UserName&ctl00$MainContent$txtPassword=Password"; 
     byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
     // Set the ContentType property of the WebRequest. 
     request.ContentType = "application/x-www-form-urlencoded"; 
     // Set the ContentLength property of the WebRequest. 
     request.ContentLength = byteArray.Length; 
     // Get the request stream. 
     Stream dataStream = request.GetRequestStream(); 
     // Write the data to the request stream. 
     dataStream.Write(byteArray, 0, byteArray.Length); 
     // Close the Stream object. 
     dataStream.Close(); 
     // Get the response. 
     WebResponse response = request.GetResponse(); 
     // Display the status. 
     Console.WriteLine(((HttpWebResponse)response).StatusDescription); 
     // Get the stream containing content returned by the server. 
     dataStream = response.GetResponseStream(); 
     // Open the stream using a StreamReader for easy access. 
     StreamReader reader = new StreamReader(dataStream); 
     // Read the content. 
     string responseFromServer = reader.ReadToEnd(); 
     // Display the content. 
     Console.WriteLine(responseFromServer); 
     // Clean up the streams. 
     reader.Close(); 
     dataStream.Close(); 
     response.Close(); 

採取的問題是,對象responseFromServer不顯示,然後旁邊的登錄頁面的內容。它只顯示登錄頁面的內容。