2015-07-11 118 views
1

我已經在VB.Net中執行了下面的過程從我的項目登錄到網站! 這裏,我已經採取了WebBrowser控件及其與webBrowser1如何使用asp.net以編程方式登錄到網站

private void button1_Click(object sender, EventArgs e) 

{ 

navigate("http://www.websitename.com"); 

webBrowser1.Document.GetElementById("WebpageTextBoxNameForUserName") 
.InnerText = "MyUserName"; 

webBrowser1.Document.GetElementById("WebpageTextBoxNameForPassword") 
.InnerText = "MyPassword"; 

webBrowser1.Document.GetElementById("WebpageButtonNameToLogin") 
.InvokeMember("click"); 

} 

public void navigate(string url) 

{ 

webBrowser1.Navigate(url);    
    while(webBrowser1.ReadyState != WebBrowserReadyState.Complete) 
    { 
      Application.DoEvents(); 

    } 

} 

現名爲我想按照ASP.Net同樣的方法可以你的人,請幫我在這裏?

謝謝

+0

看看[this](http://stackoverflow.com/a/22262976/1768303)。它適用於控制檯應用程序,我希望它也可以在ASP.NET下工作,儘管我沒有對它進行測試。 – Noseratio

回答

0

您是否試圖模擬輸入用戶名和密碼的用戶活動?

爲什麼不嘗試使用POST或GET方法(通常用於驗證網站使用POST)來實現您的目標。

可以使用了HTTPClient梅索德用於這一目的

+0

感謝安德烈給予答覆,但我試過這個http://stackoverflow.com/questions/9123159/how-to-login-to-yahoo-website-programatically,但我再次達到登錄頁面,而不是登錄頁面後的主頁 –

+0

其實我試過HTMLAgility,HttpWebRequest,Webclient,HttpWebResponse和NameValueCollection,但沒有改變的問題,這一切都讓我再次登錄頁面,即使我完成了身份驗證步驟。 –

+0

好了,嘗試在瀏覽器中檢查POST值。在Firefox中,右鍵單擊,隱藏元素,選項卡網絡。比較真正發送的用戶類型和你的asp.net模擬的POST值,它是否等於相同的POST? – Andre

1

這裏是工作示例:

此類擴展默認.NET Web客戶端與存儲cookie能力:

public class CookieAwareWebClient : WebClient 
{ 
    public void Login(string loginPageAddress, NameValueCollection loginData) 
    { 
     var parameters = new StringBuilder(); 
     foreach (string key in loginData.Keys) 
     { 
      parameters.AppendFormat("{0}={1}&", 
       HttpUtility.UrlEncode(key), 
       HttpUtility.UrlEncode(loginData[key])); 
     } 
     parameters.Length -= 1; 

     var request = (HttpWebRequest)WebRequest.Create(loginPageAddress); 

     request.Method = "POST"; 
     request.ContentType = "application/x-www-form-urlencoded"; 
     var buffer = Encoding.ASCII.GetBytes(parameters.ToString()); 
     request.ContentLength = buffer.Length; 
     using (var requestStream = request.GetRequestStream()) 
     { 
      requestStream.Write(buffer, 0, buffer.Length); 
     } 

     var container = request.CookieContainer = new CookieContainer(); 

     using (var response = request.GetResponse()) 
     { 
      CookieContainer = container; 
     } 
    } 

    public CookieAwareWebClient(CookieContainer container) 
    { 
     CookieContainer = container; 
    } 

    public CookieAwareWebClient() 
     : this(new CookieContainer()) 
    { } 

    public CookieContainer CookieContainer { get; private set; } 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     var request = (HttpWebRequest)base.GetWebRequest(address); 
     request.CookieContainer = CookieContainer; 
     return request; 
    } 
} 

您可以使用它像這個:

protected CookieAwareWebClient GetAuthenticatedClient() 
    { 
     var client = new CookieAwareWebClient(); 

     var loginData = new NameValueCollection 
       { 
         { "Email", "[email protected]" }, 
         { "Password", "testPassword" } 
       }; 

     client.Login("https://myurl.com/login", loginData); 

     return client; 
    } 

然後導航到一些內部pa ge使用:

 using (var client = GetAuthenticatedClient()) 
     { 
      var html = client.DownloadString("https://myurl.com/internalPage"); 
      //do your stuff with received HTML here 
     } 

我在我的ASP.NET項目中成功使用該邏輯。