誰かが私のC#プログラムのファイルをそのURLからダウンロードする方法を教えてもらえますか: http://www.cryptopro.ru/products/cades/plugin/get_2_
WebClient.DownloadFileを使用しようとしましたが、ファイルではなくhtmlページしか取得していません。
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");
これでうまくいくと思います。
WebClient wb = new WebClient();
wb.DownloadFile("http://www.cryptopro.ru/products/cades/plugin/get_2_0/cadeplugin.exe","file.exe");
リクエストを行うためにダウンロードステータスを知る必要がある場合、または資格情報を使用する必要がある場合は、次の解決策をお勧めします。
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!");
}
サーバーがスクリプト/コードを含むファイルをダウンロードできない場合があります。これを処理するには、リクエストがブラウザから送信されていることをサーバーにだますようにユーザーエージェントヘッダーを設定する必要があります。次のコードを使用すると、機能します。テスト済み
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");
これは期待どおりに機能し、ファイルをダウンロードできます。
WebClient.DownloadData
をお試しください
byte[]
の形式で応答を受け取ると、それを使ってやりたいことが何でもできます。