Обычно я бы просто использовал для этого WebClient.DownloadFile(). Однако иногда некоторые URL-адреса, которые мне дают, относятся к файлам, которые не существуют на сервере... либо они были удалены, либо еще не загружены. В этой ситуации вместо типичного ответа 404 (или другой ошибки, которая могла бы вызвать исключение, которое я мог бы обработать), этот сервер перенаправит 302 на страницу с ошибкой, которая выдаст 200 OK. Это означает, что метод DownloadFile() успешно сохраняет html-содержимое страницы ошибки в файле csv.
Мне нужно обойти этот плохо работающий сервер.
Вместо этого я пытаюсь отправить первоначальный запрос HEAD, чтобы проверить, существует ли файл, и загрузить его только после этого. В качестве теста у меня есть этот образец с одним жестко запрограммированным URL-адресом:
Код: Выделить всё
public static void Main()
{
var fileUrl = "https://www.ffiec.gov/npw/FinancialReport/ReturnFinancialReportCSV?rpt=FRY9C&id=1123944&dt=20240331";
if (URLExists(fileUrl))
{
Console.WriteLine("Downloading file");
try
{
var location = @"C:\Users\Downloads\FRY9C\";
var fileSaveUrl = location + "testFile.csv";
using WebClient cln = new WebClient();
cln.UseDefaultCredentials = true;
cln.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
cln.Headers.Add("user-agent", "Only a test!");
cln.DownloadFile(fileUrl, fileSaveUrl);
}
catch {}
}
}
public static bool URLExists(string url)
{
using WebRequest webRequest = WebRequest.Create(url);
webRequest.Timeout = 1200; // miliseconds
webRequest.Method = "HEAD";
try
{
using HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
return true;
}
catch {}
return false;
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... ownloading