我试图从具有用户名和密码的网页解析文本(或将文本下载为.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;
}
}
答案 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