[英]SSIS Script: HTTPWebRequest and Webclient.Downloadfile failing on part of Uri
我正在尝试从 API 下载文件,该文件在 chrome 中使用以下 URL 运行良好:
但是,当我尝试使用HTTPWebRequest
或Webclient.Downloadfile
在 SSIS 中的 ac# 脚本中下载它时,它失败(404 响应错误)。
经过数小时的 Stackoverflow 搜索,尝试了多种方法,我发现如果删除部分 Url,两种方法都可以工作:
为什么包含“.CP_EUR_HAB.NSA.B1GQ”。 使它在 c# 中失败但在 chrome 中失败?
我正在使用的代码:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(sourceFilePath));
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (Stream file = File.Create(savePathAndName))
{
CopyStream(stream, file);
}
public static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[8 * 1024];
int len;
while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, len);
}
}
更新最初,SSIS 被省略了,因为我认为它无关紧要,但是,在评论说他们可以让它工作之后,我测试了 Uri 返回的内容,并且它删除了问号前的最后一个点:
包含这些点段有许多记录在案的困难:只有几个包括:
有没有办法使用 Uri 类在 url 中保留点段? 和一个 url 资源,它是一个点 (%2E)
如果该点不存在,API 将返回失败。 微软证实了这一点:
https://docs.microsoft.com/en-us/dotnet/api/system.uri?view=net-5.0
经过一番调查,似乎这可能与框架有关,更新它可能是答案,这可能表明为什么其他人可以使这个工作,而不是我在 SSIS 中。 SSIS 2017 使用的框架绑定到 4.5。 我想我可能会陷入困境。
它是“.CP_EUR_HAB.NSA.B1GQ”部分的尾随点。 这导致了这个问题。 Uri 会自动删除点段,似乎没有办法解决这个问题。
由于它在 SSIS 207 中使用,我无法更改目标框架,Microsoft 现在将其与 SSIS 版本相关联。
解决方案是,而不是使用尾随的“.”。 API 需要指定国家/地区通配符,我不得不在 URL 中列出每个国家/地区代码:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.