【问题标题】:Authenticate password protected website验证受密码保护的网站
【发布时间】:2014-10-01 03:27:55
【问题描述】:

我正在尝试从具有用户名和密码的网页中解析文本(或将文本下载为 .txt 文件)。几天来,我一直在网上和 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;
        }
    }

【问题讨论】:

  • 也许您尝试进行身份验证的网站正在使用一些验证请求的来源而不接受来自其他地方的 POST 的孩子?
  • 提示windows登录

标签: c# parsing login


【解决方案1】:

只需使用 HTTPWebRequest 从外部站点检索数据并从 WebResponse 解析您需要的内容。根据站点使用的身份验证机制(基本身份验证、表单身份验证等),您将需要使用稍微不同的技术进行身份验证。 this SO Post 中接受的答案有一些很好的例子。换句话说,如果是 Basic Auth 或 Windows Auth,那么您可以使用 Network Credentials 类并将其与请求一起传递。如果它使用某种基于 cookie 的身份验证,您将必须构建一个表单帖子,获取身份验证 cookie,然后将 cookie 与您的数据请求一起传递。

【讨论】:

    【解决方案2】:

    是的,有一个简单的解决方案。

    由于您需要从第三方网站抓取一些文本,因此您需要一个浏览器。你需要务实地去做,因此你需要一个可编程的浏览器。

    有一些可用于 .NET 的无头可编程浏览器(如下所列)。您可以使用 nuget 包将它们包含在您的项目中并进一步编程您的要求(即编写代码来识别输入框以输入用户名和密码并单击登录按钮等)

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

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

    Watin - http://watin.org/

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

    除此之外,您还可以像使用 jQuery 一样使用 CsQuery 解析 DOM。是的 CsQuery 是 jQuery 的 C# 端口。它真的是一个很棒的工具

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

    【讨论】:

      猜你喜欢
      • 2011-01-04
      • 2013-03-02
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      • 1970-01-01
      相关资源
      最近更新 更多