SSIS WebClient () Скачать файл сценария Задача проблема - PullRequest
0 голосов
/ 27 июня 2018

Мне интересно, может кто-нибудь помочь мне с этим вопросом, пожалуйста. Я новичок в использовании задач сценариев в пакетах служб SSIS, и я не могу найти решение этой проблемы. Поэтому я создал скрипт Task для загрузки файла с веб-портала. Пакет работал нормально в течение нескольких месяцев, но внезапно он начал давать сбои. Причина в том, что URL снова направляется на страницу аутентификации веб-портала (похоже, клиент мог изменить настройки безопасности своего сайта или что-то в этом роде). Так что теперь пустой файл загружается. ниже приведен код, который я использую в своей задаче сценария. Есть ли код, который я могу добавить в скрипт ниже, чтобы пропустить страницу аутентификации, так как я уже посылаю имя пользователя и пароль в скрипте ниже. Еще одна вещь, которую нужно добавить, я могу загрузить файл вручную, когда я копирую и вставляю URL в Chrome, так что это означает, что файл данных существует на портале, это просто задача скрипта, перенаправляемая на страницу аутентификации снова, поэтому не удается. Заранее спасибо.

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

        WebClient wc = new WebClient();// { UseDefaultCredentials = true };
        var DownloadPath = Dts.Variables["User::varDownloadPathNew"].Value.ToString();
        DateTime startDate = DateTime.Parse(Dts.Variables["User::StartDate"].Value.ToString());
        DateTime enddate = DateTime.Parse(Dts.Variables["User::EndDate"].Value.ToString());

        wc.Credentials = new NetworkCredential("UserName", "Password");
        wc.DownloadFile("https://Test123.co.uk/model/download?&startfilter=" + startDate.ToString("dd") + "%2F" + startDate.ToString("MM") + "%2F" + startDate.ToString("yyyy") + "&mnu_jobdateendfilter=" + enddate.ToString("dd") + "%2F" + enddate.ToString("MM") + "%2F" + enddate.ToString("yyyy") + "&%A6&maxrows=400&format=excel&filename=Test.xls", DownloadPath);

        Dts.TaskResult = (int)ScriptResults.Success;

    }

1 Ответ

0 голосов
/ 28 июня 2018

Добавление приведенного ниже кода к моему исходному коду решило проблему. Согласно предложению @billinkc, портал использовал куки для аутентификации, поэтому я проверил имя пользователя и пароль куки из ie / chrome (в моем случае портал использовал 2 имени куки и пароли, поэтому я использовал оба), а затем использовал их ниже код wc.Headers.Add (HttpRequestHeader.Cookie, "cookiename = password");

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

    WebClient wc = new WebClient();// { UseDefaultCredentials = true };
    wc.Headers.Add(HttpRequestHeader.Cookie, "NSC_JOmbbd3tb4=ffffffffc3a03f7e45525; User=eyJhbGciOiJSU");
    var DownloadPath = Dts.Variables["User::varDownloadPathNew"].Value.ToString();
    DateTime startDate = DateTime.Parse(Dts.Variables["User::StartDate"].Value.ToString());
    DateTime enddate = DateTime.Parse(Dts.Variables["User::EndDate"].Value.ToString());

    wc.Credentials = new NetworkCredential("UserName", "Password");
    wc.DownloadFile("https://Test123.co.uk/model/download?&startfilter=" + startDate.ToString("dd") + "%2F" + startDate.ToString("MM") + "%2F" + startDate.ToString("yyyy") + "&mnu_jobdateendfilter=" + enddate.ToString("dd") + "%2F" + enddate.ToString("MM") + "%2F" + enddate.ToString("yyyy") + "&%A6&maxrows=400&format=excel&filename=Test.xls", DownloadPath);

    Dts.TaskResult = (int)ScriptResults.Success;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...