web-dev-qa-db-ja.com

C#URLからファイルをダウンロード

誰かが私のC#プログラムのファイルをそのURLからダウンロードする方法を教えてもらえますか: http://www.cryptopro.ru/products/cades/plugin/get_2_

WebClient.DownloadFileを使用しようとしましたが、ファイルではなくhtmlページしか取得していません。

5
C0deGen

Fiddlerを見ると、正当なU/A文字列がない場合、リクエストは失敗します。

WebClient wb = new WebClient();
wb.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.33 Safari/537.36");
wb.DownloadFile("http://www.cryptopro.ru/products/cades/plugin/get_2_0/cadeplugin.exe", "c:\\xxx\\xxx.exe");
12
Alex K.

これでうまくいくと思います。

WebClient wb = new WebClient();
wb.DownloadFile("http://www.cryptopro.ru/products/cades/plugin/get_2_0/cadeplugin.exe","file.exe");
4
Slashy

リクエストを行うためにダウンロードステータスを知る必要がある場合、または資格情報を使用する必要がある場合は、次の解決策をお勧めします。

WebClient client = new WebClient();
Uri ur = new Uri("http://remoteserver.do/images/img.jpg");
client.Credentials = new NetworkCredential("username", "password");
client.DownloadProgressChanged += WebClientDownloadProgressChanged;
client.DownloadDataCompleted += WebClientDownloadCompleted;
client.DownloadFileAsync(ur, @"C:\path\newImage.jpg");

そして彼女はそれがコールバックの実装です:

void WebClientDownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
    Console.WriteLine("Download status: {0}%.", e.ProgressPercentage);
}

void WebClientDownloadCompleted(object sender, DownloadDataCompletedEventArgs e)
{
    Console.WriteLine("Download finished!");
}
1
Kreshnik

サーバーがスクリプト/コードを含むファイルをダウンロードできない場合があります。これを処理するには、リクエストがブラウザから送信されていることをサーバーにだますようにユーザーエージェントヘッダーを設定する必要があります。次のコードを使用すると、機能します。テスト済み

 var webClient=new WebClient();
 webClient.Headers["User-Agent"] =
                "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36";
 webClient.DownloadFile("the url","path to downloaded file");

これは期待どおりに機能し、ファイルをダウンロードできます。

0
Gurpreet

WebClient.DownloadDataをお試しください

byte[]の形式で応答を受け取ると、それを使ってやりたいことが何でもできます。

0
DPac