2014-09-30 235 views
0

我試圖從具有用戶名和密碼的網頁解析文本(或將文本下載爲.txt文件)。我一直在圍繞net和stackoverflow巡迴幾天尋找解決方案。似乎應該有一個簡單的解決方案,但迄今爲止我無法找到它。下面的代碼似乎是迄今爲止我發現的最合理和最直接的代碼。它目前正在返回一個錯誤401代碼。驗證密碼保護的網站

 private void Form1_Load(object sender, EventArgs e){ 

     ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback 
     (
      delegate { return true; } 
     ); 

     using (var client = new CookieAwareWebClient()) 
     { 
      var values = new NameValueCollection 
      { 
       { "username", "username" }, 
       { "password", "password" }, 
      }; 

      client.UploadValues("https://website/", values); 

      string result = client.DownloadString("https://website/licences"); 

      lbl1.Text = result; 
     } 
    } 
+0

也許你正在嘗試驗證的網站正在使用某個孩子驗證請求來自哪裏,而不接受來自其他地方的POST? – Floremin 2014-09-30 19:13:12

+0

它提示Windows登錄 – 2014-10-01 18:32:22

回答

0

是的,有一個簡單的解決方案。

由於您需要從第三方網站刮取一些文字,您需要瀏覽器。你需要切實地做到這一點,因此你需要一個可編程的瀏覽器。

有一些可用於.NET的無頭可編程瀏覽器(下面列出)。您可以使用的NuGet軟件包,包括他們在您的項目,並進一步計劃你的要求(即寫代碼來識別輸入框中輸入用戶名和密碼,點擊登錄按鈕等)

HTML敏捷性包 - http://htmlagilitypack.codeplex.com/

的Webkit - http://sourceforge.net/projects/webkitdotnet/

華廷 - http://watin.org/

SimpleBrowser - https://github.com/axefrog/SimpleBrowser

隨着這個你ç使用CsQuery來解析你的DOM,就像你使用jQuery一樣。是的CsQuery是jQuery的C#端口。它真的是一個偉大的工具

CsQury - https://github.com/jamietre/CsQuery

1

只需使用一個HttpWebRequest的從外部站點檢索數據並解析你了WebResponse需要什麼。根據網站使用的身份驗證機制(基本身份驗證,表單身份驗證等),您需要使用稍微不同的技術進行身份驗證。 this SO Post已被接受的答案有一些很好的例子。爲了解釋,如果是基本身份驗證或Windows身份驗證,則可以使用網絡憑證類並將其與請求一起傳遞。如果它使用某種基於cookie的身份驗證,則必須構建表單帖子,獲取auth cookie,然後將cookie傳遞給您的數據請求。