我做了類似於從網站獲取信息的內容。我無法給你一個確切的答案。但這個想法是通過表單值將登錄信息發送到頁面。如果網站是依靠餅乾,你可以使用這個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