2013-04-11 111 views
0

下面的代碼已被提琴手產生的,被稱爲在button_Click事件。如何檢查是否登錄失敗

//Create request to URL. 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://forums.codeguru.com/login.php?do=login"); 

//Set request headers. 
request.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:19.0) Gecko/20100101 Firefox/19.0"; 
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
request.Headers.Set(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.5"); 
request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); 
request.Referer = "http://forums.codeguru.com/"; 
request.KeepAlive = false; 
request.ContentType = "application/x-www-form-urlencoded"; 

//Set request method 
request.Method = "POST"; 

// Disable 'Expect: 100-continue' behavior. More info: http://haacked.com/archive/2004/05/15/http-web-request-expect-100-continue.aspx 
      request.ServicePoint.Expect100Continue = false; 

//Set request body. 

**// Fail** 
    string body = @"vb_login_username=**userid**&vb_login_password=&vb_login_password_hint=Password&s=&securitytoken=guest&do=login&vb_login_md5password=a35cef11bdd55e36423f8d3b1ed69dea&vb_login_md5password_utf=a35cef11bdd55e36423f8d3b1ed69dea"; 

    byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); 
    request.ContentLength = postBytes.Length; 
    Stream stream = request.GetRequestStream(); 
    stream.Write(postBytes, 0, postBytes.Length); 
    stream.Close(); 

//Get response to request. 
response = (HttpWebResponse)request.GetResponse(); 
Stream responseStream = response.GetResponseStream(); 

var reader = new System.IO.StreamReader(responseStream, Encoding.UTF8); 
string srcString = reader.ReadToEnd(); 

} 
catch (WebException e) 
{ 
      //ProtocolError indicates a valid HTTP response, but with a non-200 status code (e.g. 304 Not Modified, 404 Not Found) 
      if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; 
      else return false; 
} 
catch (Exception) 
{ 
      if (response != null) response.Close(); 
      return false; 
} 

return true; 

}

代碼在button_Click事件

 HttpWebResponse response; 

     if (Request_forums_codeguru_com(out response)) 
     { 
      //Success, possibly use response. 

      HttpStatusCode status = response.StatusCode; 

      // Status is alway OK 

      response.Close(); 

      MessageBox.Show("Succesful login"); 

     } 
     else 
     { 
      //Failure, cannot use response. 

      MessageBox.Show("Unsuccesful login"); 
     } 

但是即使我輸入了錯誤的密碼,我得到的HTTPStatus爲OK。我如何檢查登錄失敗。

在最後的階段,我將在Python服務器接收數據,因此,上述只是測試。

編輯:

當用戶輸入了錯誤的用戶名/密碼組合,他/她會看到以下內容: -

Wrong User id/Password combination

回答

1

通過上面的代碼,你基本上是模仿瀏覽器行爲。該網站不一定返回出錯的HTTPStatus只是因爲你有密碼錯誤 - 看目標網站如何處理錯誤的密碼。

如果試圖訪問受保護的頁面,這時候你可能會收到未經授權的訪問錯誤並重定向到登錄屏幕。取決於網站的設置。

有幾個可能的原因:在

  1. 登錄,然後嘗試訪問作保頁面,檢查 非授權訪問錯誤或頁面文本返回的響應
  2. 檢查的網址響應 - 它改變了你期望 一個成功的登錄網址?
  3. 檢查響應的文本,尋找 類似「密碼錯誤」,「密碼無效」等

最終,有可能從2選項你除了做這個的沒有可擴展的或統一的方式將會編寫特定於站點的代碼。