验证受密码保护的网站

时间:2014-09-30 19:00:17

标签: c# parsing login

我试图从具有用户名和密码的网页解析文本(或将文本下载为.txt文件)。我已经在网络和堆栈溢流周围巡航了几天寻找解决方案。似乎应该有一个简单的解决方案,但到目前为止我无法找到它。以下代码似乎是迄今为止我发现的最合乎逻辑且最直接的代码。它目前正在返回错误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;
        }
    }

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

由于您需要从第三方网站获取某些文本,因此您需要使用浏览器。你需要务实地做到这一点,因此你需要一个可编程的浏览器。

有一些可用于.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