簡體   English   中英

SSIS 腳本:部分 Uri 上的 HTTPWebRequest 和 Webclient.Downloadfile 失敗

[英]SSIS Script: HTTPWebRequest and Webclient.Downloadfile failing on part of Uri

我正在嘗試從 API 下載文件,該文件在 chrome 中使用以下 URL 運行良好:

https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/data/namq_10_pc/.CP_EUR_HAB.NSA.B1GQ.?startPeriod=2017&format=SDMX_2.1_STRUCTURED

但是,當我嘗試使用HTTPWebRequestWebclient.Downloadfile在 SSIS 中的 ac# 腳本中下載它時,它失敗(404 響應錯誤)。

經過數小時的 Stackoverflow 搜索,嘗試了多種方法,我發現如果刪除部分 Url,兩種方法都可以工作:

https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/data/namq_10_pc/?startPeriod=2017&format=SDMX_2.1_STRUCTURED

為什么包含“.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 返回的內容,並且它刪除了問號前的最后一個點:

https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/data/namq_10_pc/.CP_EUR_HAB.NSA.B1GQ?startPeriod=2017&format=SDMX_2.1_STRUCTURED

包含這些點段有許多記錄在案的困難:只有幾個包括:

有沒有辦法使用 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 中列出每個國家/地區代碼:

https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/data/namq_10_pc/.CP_EUR_HAB.NSA.B1GQ.UK+BE+BG+CZ+DK+DE+EE+IE+EL+ES +FR+HR+IT+CY+LV+LT+LU+HU+MT+NL+AT+PL+PT+RO+SI+SK+FI+SE+IS+NO+CH+ME+MK+AL+RS +TR+BA+XK?startPeriod=2017&format=SDMX_2.1_STRUCTURED

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM