2014-09-30 121 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传递给您的数据请求。