2014-10-10 59 views
1

我需要從網站下載文件(不是由我寫的)。 我有一個有效的用戶名/密碼來訪問它,我可以手動。 但我想創建一個自動化過程(在C#中)定期下載它。使用C#從WebForm下載文件

手動我必須登錄,瀏覽到下載頁面,選擇一些組合框,然後單擊「下載」。 此鏈接執行回發並返回請求的文件。

我想我應該使用WebClient.DownloadFile,但我無法弄清楚如何傳遞所有必要的數據並請求回發正確的方式。

+1

您的問題無法在當前表單中回答(您可以使用的方式)。您需要說明網站上使用的認證類型(即OAuth)以及如何獲取文件的URL。 – 2014-10-10 14:47:09

+0

我發佈的代碼將幫助您下載,但仍有大量數據仍未提供。 – Greg 2014-10-10 14:51:05

+0

您可以使用[Watin](http://watin.org/)或任何其他Web自動化API。 – Bolu 2014-10-10 14:54:37

回答

0

你會做這樣的事情:

HttpWebRequest request = WebRequest.Create(@"http://stackoverflow.com") as HttpWebRequest; 
request.Credentials = NetworkCredentials(@"username", @"password"); 
request.Timeout = 300; 

if(string.IsNullOrEmpty(request)) 
    throw new Exception("Error in Request"); 

using(var stream = request.GetResponse().GetResponseStream()) 
    using(var writer = File.Create(Environment.GetFolderPath(Environment.SpecialFolder.Desktop)) 
      stream.CopyTo(writer); 

你會使用NetworkCredentials到這些信息傳遞給一個網站。一旦你創建了HttpWebRequest,你將能夠訪問很多功能。

+0

謝謝,我瞭解憑據,但我不知道如何調用回發。如果我使用url創建流,我將擁有html表單,但我想要提交文件。 (對不起,我的英語) – WaveMax 2014-10-10 14:45:14

+1

附註:它不太可能幫助OP,因爲大多數站點(如您的示例中的SO)使用OAuth或基於表單的身份驗證... – 2014-10-10 14:45:26

+0

@AlexeiLevenkov我只是在那裏放置一個URL。 – Greg 2014-10-10 14:49:32

3

這個其他網站有API嗎?

否則,你將不得不做一個web請求,以他們需要的格式提交所有細節,然後讀取響應,然後自動填寫第二個表單以「檢查某個組合框」,然後最後閱讀包含該文件的響應。

此外,還有瀏覽器仿真軟件,如硒,用於網站測試。你可以在那裏設置一個測試/腳本,它會爲你做上述所有的事情。我不確定如何處理下載的文件。

如果您想要執行路線1,請準備在每次其他網站更改時更改您的程序。如果他們添加一個驗證碼,那麼你幾乎搞砸了。

爲了方便起見,在Web瀏覽器中存儲的密碼不會爲您節省大部分麻煩?

+0

不幸的是,我不得不定期下載文件,每次都會有數十個文件。每個文件都必須到不同的位置並接受不同的闡述。我需要太多的時間手動完成。 – WaveMax 2014-10-10 15:07:03

+0

好吧,恕我直言,你需要做的是模擬一個網頁瀏覽器。我的第一個問題是,你是否必須每次都從組合框中選擇不同的值,因爲如果你這樣做的話,你的程序會變得很糟糕... – Del 2014-10-10 16:02:58

+0

不幸的是,我必須每次從組合框中選擇不同的值。我的夢想是通過網絡憑證和所有數據通過查詢字符串請求一個Url,並將一個文件作爲響應,但似乎它不能以這種方式工作。其實web服務會更加讚賞... – WaveMax 2014-10-13 09:33:41