我想知道是否有人可以帮助我解决这个问题。我不熟悉在 SSIS 包中使用脚本任务,但无法找到此问题的解决方案。因此,我创建了此脚本任务以从Web门户下载文件。软件包在几个月内运行良好,但突然之间,它开始失败。原因是,url再次被定向到Web门户的身份验证页面(看起来客户端可能已更改其网站的安全设置或其他内容(。所以现在正在下载一个空白文件。 下面是我在脚本任务中使用的代码。是否有我可以添加到以下脚本中的代码以绕过身份验证页面,因为我已经在下面的脚本中发送用户名和密码。还有一件事要补充,当我将 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;
}
将以下代码添加到我的原始代码中解决了这个问题。正如@billinkc所建议的那样,门户正在使用cookie进行身份验证,因此我从ie/chrome检查了cookie用户名和密码(在我的情况下,门户使用了2个cookie名称和密码,所以我同时使用了两者(,然后在下面的代码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;
}