Следите за загрузкой файла на С#, на котором веб-сайт использует файлы cookie.

Это продолжение Загрузить файл, но мне кажется, что я должен сделать это через браузер.

Я чувствую, что на вопрос был дан ответ, но мне нужна дополнительная помощь.

Вот мой текущий код:

    public async void TryDownload()
    {
        var clientHandler = new HttpClientHandler
        {
            AllowAutoRedirect = true,
            UseCookies = true,
            CookieContainer = new CookieContainer()
        };

        using (var httpClient = new HttpClient(clientHandler))
        {
            // this gets the request and allows the site to set cookies.
            var warmup = await httpClient.GetAsync("https://www.fapiis.gov/fapiis/allfapiisdata.action"); //This is the last line that runs when I step thru it.

            // get the file (cookies are sent automatically).
            var fileResponse = httpClient.GetAsync("https://www.fapiis.gov/fapiis/downloadview?type=allFapiis");

            if (fileResponse.Result.IsSuccessStatusCode)
            {
                HttpContent content = fileResponse.Result.Content;
                var contentStream = await content.ReadAsStreamAsync();

                string fname = "allFapiis" + DateTime.Now.ToLongDateString() + ".xlsx";
                using (var fileStream = System.IO.File.Create(@"C:\ERA\DATA\FAPIIS\" + fname))
                {
                    contentStream.CopyTo(fileStream);
                }
            }
        }
    }    

    public void Main()
    {
        // TODO: Add your code here

        TryDownload();

        Dts.TaskResult = (int)ScriptResults.Success;
    }

Я запускаю это в задаче сценария в SSIS.

Когда я перешагиваю через него, процесс резко заканчивается настройкой «разогрева».

Я вижу, что процесс сработал для ответчика, потому что я вижу, что его вывод соответствует тому, что я загрузил вручную.

Если я попытаюсь включить await в вызов TryDownload() из main, он лает о необходимости быть в методе асинхронной задачи, который я не могу сделать, потому что это в main.

Что я здесь делаю неправильно?

Спасибо за вашу помощь!


person KeithL    schedule 26.09.2019    source источник
comment
Взгляните на это   -  person Matt.G    schedule 26.09.2019
comment
@ Matt.G ваша ссылка и этот комментарий решили проблему: это было для меня. Языковые версии также можно установить на странице «Свойства» › вкладка «Сборка» › «Дополнительно». Установка этого значения на 7.1 решила мою проблему, хотя я действительно не понимаю, что я сделал.   -  person KeithL    schedule 26.09.2019


Ответы (1)


TryDownload должно быть Task. Тогда можно дождаться.

public async Task TryDownload()

public static async void Main()
{
    await TryDownload();
}
person Patrick Hofman    schedule 26.09.2019
comment
Программа не содержит статического метода Main, подходящего для точки входа. Это, вероятно, просто настройка, которую я не знаю, чтобы изменить. - person KeithL; 26.09.2019