Похоже, что используемый вами менеджер загрузок может подделывать заголовки реферера, а ваша реализация - нет. Возможно, сервер ограничивает загрузку файла, который вы пытаетесь загрузить, чтобы его можно было загружать только в том случае, если для поля referer задано определенное значение (то есть сайт на сервере). Вы пытались:
client.Headers.Add("referer", uri);
Возможно, стоит использовать Fiddler , чтобы увидеть разницу между запросом, который отправляет менеджер загрузок, и вашим, а затем изменить ваш, пока он не заработает.
Редактировать
Я проверил предоставленный вами URL-адрес, и он работает локально, добавив следующее:
client.Headers.Add("Accept: text/html, application/xhtml+xml, */*");
client.Headers.Add("User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)");
Вам необходимо предоставить заголовок «Принять», иначе сервер не знает, что ваш клиент хочет / примет. Вот мой полный анонимный пример приложения (для простоты используется Sleep ()):
string url = "http://..."; // Change this to the full url of the file you want to download
string filename = "downloadedfile.zip"; // Change this to the filename you want to save it as locally.
WebClient client = new WebClient();
try
{
Uri uri = new Uri(url);
client.Headers.Add("Accept: text/html, application/xhtml+xml, */*");
client.Headers.Add("User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)");
client.DownloadFileAsync(uri, filename);
while (client.IsBusy)
{
System.Threading.Thread.Sleep(1000);
}
}
catch (UriFormatException ex)
{
Console.WriteLine(ex.Message);
}