我做了类似于从网站获取信息的内容。我无法给你一个确切的答案。但这个想法是通过表单值将登录信息发送到页面。如果网站是依靠饼干,你可以使用这个cookie意识到Web客户端:
public class CookieAwareWebClient : WebClient
{
private CookieContainer cookieContainer = new CookieContainer();
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = cookieContainer;
}
return request;
}
}
你应该知道,有些网站依靠会话ID被传递,所以我做的第一件事就是来从会话ID该页面:
var client = new CookieAwareWebClient();
client.Encoding = Encoding.UTF8;
var indexHtml = client.DownloadString(*index page url*);
string sessionID = fetchSessionID(indexHtml);
然后,我不得不登录到页面,你可以通过上传值到页面。你可以看到具有“查看源代码”的特定表单元素,但是你必须知道一点HTML才能这样做。
var values = new NameValueCollection();
values.Add("sessionid", sessionID); //Fetched session id
values.Add("brugerid", args[0]); //Username in my case
values.Add("adgangskode", args[1]); //Password in my case
values.Add("login", "Login"); //The login button
//Logging in
client.UploadValues(*url to login*, values); //If all goes perfect, I'm logged in now
然后我可以下载我需要的页面。在你的情况下,如果文件总是具有相同的URL(如Export.aspx?From = 2010-10-10 & To = 2010-11-11)或UploadValues(...),则可以使用DownloadFile(...)您可以像之前一样指定值,但会保存结果。
string html = client.DownloadString(*url*);
看来你的步骤比我多了很多。但原则是一样的。要查看您发送到网站的什么值登录等,您可以使用可以捕获正在进行的活动的程序,例如Fiddler(窗口)。基本你只是做同样的事情,但要小心会议ID等,这是暂时的。
最好的想法是真的使用一些本地的方式来获取数据,但如果没有得到代码,数据库等,你必须做到这一点丑陋的方式。你可能还需要一个HTML解析器来获取数据(ups,你不会因为你导出到一个文件)。最后但并非最不重要的一点是,请记住页面可以更改,并且很有可能无法登录,解析等。
请询问您是否不确定发生了什么事情。
加成
的CookieAwareWebClient是不是我的代码:
我也发现了一些相关的主题:
谢谢!我需要的这个项目被取消了,但它肯定需要更多的研究... – 2010-08-04 08:25:59