2010-08-02 99 views
0

我的應用程序旨在加快從電話系統中檢索電話信息的速度。 獲取此信息的最佳方式是在電話系統的Web界面上創建一個新搜索,並將結果導出到Excel電子表格中,然後我的應用程序將其導入到DataSet中。從網頁中檢索信息

爲了獲得出口,從登錄屏幕,該過程如下:

  • 登錄
  • 導航到報表Page
  • 點擊「擴展細節」鏈接
  • 選擇「擴展「複選框
  • 從列表框中選擇擴展名(通常是當前正在使用的所有擴展名)
  • 指定日期範圍
  • 點擊導出按鈕

這不是一個很大的工作,每天做手工,但是,對於可靠性,這將是巨大的,如果我可以讓我的應用程序自動執行此操作在第一時間啓動每一天。 由於該公司有超過1人將使用此應用程序,因此使用Windows服務會更好。

我不知道它是否會有所幫助,但該系統是Datatex黃玉下一代電話管理系統:http://www.datatex.co.za/downloads/index.html#TNG

誰能給我一個基本的想法如何做到這一點?

此外,任何人都可以發佈鏈接(如有需要,請留言)到我可以瞭解更多關於如何做到這一點的網頁?

回答

0

有了一個HTTP客戶端,你需要做到以下幾點:

  • 登錄,使用cookie或HTTP認證
  • 請求一個頁面
  • 提交表單數據

這意味着在程序中需要一些類或組件,可以執行HTTP,Cookie,身份驗證和表單。有了這個,你可以做出與用戶相同的請求。

+0

謝謝!我需要的這個項目被取消了,但它肯定需要更多的研究... – 2010-08-04 08:25:59

2

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

我也發現了一些相關的主題:

+0

感謝,代碼+1,我會試試看 – 2010-08-04 08:25:03