我需要一些帮助,我已经分配了一个工作项目。目前我们手动进入网站,登录,然后每个月从供应商的网站下载2个excel文件。这些文件然后被加载到SQL中。从密码保护网站下载自动化
我们想让这个过程自动化。现在将文件加载到SQL我可以做到,但我不知道如何自动登录到网站输入我的用户详细信息和收集文件。我主要处理SQL,并且具有很少的.NET体验,所以任何代码示例都将非常感谢。
只是为了确认。登录表单位于aspx页面上。只是一个包含用户名&密码字段,忘记密码链接和登录按钮的表格的基本表单
我需要一些帮助,我已经分配了一个工作项目。目前我们手动进入网站,登录,然后每个月从供应商的网站下载2个excel文件。这些文件然后被加载到SQL中。从密码保护网站下载自动化
我们想让这个过程自动化。现在将文件加载到SQL我可以做到,但我不知道如何自动登录到网站输入我的用户详细信息和收集文件。我主要处理SQL,并且具有很少的.NET体验,所以任何代码示例都将非常感谢。
只是为了确认。登录表单位于aspx页面上。只是一个包含用户名&密码字段,忘记密码链接和登录按钮的表格的基本表单
您可以使用webclient或httpwebrequest。
Login to the page with HttpWebRequest
How do you login to a webpage and retrieve its content in C#?
HttpWebRequest的例子:
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://sso.bhmobile.ba/sso/login");
req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)";
req.Method = "POST";
req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
req.Headers.Add("Accept-Language: en-us,en;q=0.5");
req.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7");
req.KeepAlive = true;
req.Headers.Add("Keep-Alive: 300");
req.Referer ="http://sso.bhmobile.ba/sso/login";
req.ContentType = "application/x-www-form-urlencoded";
String Username = "username";
String PassWord = "Password";
StreamWriter sw = new StreamWriter(req.GetRequestStream());
sw.Write("application=portal&url=http%3A%2F%2Fwww.bhmobile.ba%2Fportal%2Fredirect%3Bjsessionid%3D1C568AAA1FB8B5C757CF5F68BE6ECE65%3Ftype%3Dssologin%26url%3D%2Fportal%2Fshow%3Bjsessionid%3D1C568AAA1FB8B5C757CF5F68BE6ECE65%3Fidc%3D1023278&realm=sso&userid=" + Username + "&password=" + password + "&x=16&y=11");
sw.Close();
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string tmp = reader.ReadToEnd();
foreach (Cookie cook in response.Cookies)
{
tmp += "\n" + cook.Name + ": " + cook.Value;
}
Response.Write(tmp);
Response.End();
Web客户端例如:
WebClient wc = new WebClient();
wc.Credentials = new NetworkCredential("username", "password");
string url = "http://foo.com";
try
{
using (Stream stream = wc.OpenRead(new Uri(url)))
{
using (StreamReader reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
}
}
catch (WebException e)
{
//Error handeling
}
好的答案,除了我会放弃“Accept-Encoding:gzip,deflate”标题,因为您将不得不为这种情况解压流。 并使用像Fiddler这样的东西来嗅探你应该如何发送实际的请求。 – 2010-04-10 15:11:02
谢谢: - 它看起来像webclient是我所需要的。将进一步调查 – Andrew 2010-04-10 15:23:50
@Mikael Svenson:好点! Yip,fiddler很棒,应该总是用来检查在使用webclient或httpwebrequest模拟浏览器请求时需要发送哪些标题,表单域和隐藏字段。 +1 – 2010-04-10 15:25:23
是否登录通过页面上的表单,或者浏览器对话框询问用户名和密码? – 2010-04-10 14:55:50
有许多不同的方法来密码保护网站(HTTP基本;登录页面设置cookie,...)。你的网站使用什么机制? – dtb 2010-04-10 14:56:31