2016-01-08 61 views
0

我需要使用POST方法來發送HTTP請求到一個Asp.Net形式提交asp.net形式,這種形式是一個登錄表單包括3個控制:發送HTTP請求的數據和使用C#

  1. 文本框對用戶名(名稱=「x」和id =「IX」)。
  2. TextBox的密碼(名稱=「P」和ID =「IP」)。
  3. 按鈕提交(名稱=「S」和id =「IS」)。

我嘗試下面的代碼:

string getUrl = "http://url/login.aspx"; 
string postData = String.Format("x={0}&P={1}", "usernamevalue", "passwordvalue"); 
HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(getUrl); 
getRequest.Method = WebRequestMethods.Http.Post; 
getRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"; 
getRequest.AllowWriteStreamBuffering = true; 
getRequest.ProtocolVersion = HttpVersion.Version11; 
getRequest.AllowAutoRedirect = true; 
getRequest.ContentType = "application/x-www-form-urlencoded"; 

byte[] byteArray = Encoding.ASCII.GetBytes(postData); 
getRequest.ContentLength = byteArray.Length; 
Stream newStream = getRequest.GetRequestStream(); //open connection 
newStream.Write(byteArray, 0, byteArray.Length); // Send the data. 
newStream.Close(); 

HttpWebResponse getResponse = (HttpWebResponse)getRequest.GetResponse(); 
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream())) 
{ 
    string sourceCode = sr.ReadToEnd(); 
} 

和檢索字符串源碼當它返回登錄頁面inspite它應該返回其重定向到它提交成功登錄後首頁的HTML。

我認爲使用的代碼沒有提交按鈕,我需要通過將數據傳遞給控件來解決這個問題,然後單擊按鈕提交,然後獲取主頁(成功登錄後)而不是登錄頁面響應的響應。

在此先感謝。

+0

使用cookiecontainer獲取響應cookie。然後用相同的cookie容器向主頁發送請求。 – halit

+0

你說它成功登錄了,值得注意的是它不應該有,因爲你沒有給它任何驗證令牌或任何東西,所以它很容易受到跨站請求僞造。 – Matthew

+0

提供的代碼沒有執行成功的登錄,我需要一個代碼來執行成功的登錄,並通過按鈕提交點擊操作,我在我的登錄頁面的URL設置斷點,並沒有達到按鈕事件。 – Ahmy

回答

0

使用cookiecontainer獲取響應cookie。然後用相同的cookie容器向主頁發送請求。

如果您的登錄請求成功,Response可能會將cookie添加到響應中。 因此,您可以在每個頁面上使用相同的cookie

var cookieContainer = new CookieContainer(); 
getRequest.CookieContainer = cookieContainer; 
... 
//send request to login.aspx page. 

HttpWebRequest homeRequest = (HttpWebRequest)WebRequest.Create(homeUrl); 
homeRequest.CookieContainer = cookieContainer; 
//send request to homepage