Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power Query w Excelu, Power BI i Fabric
Web.Contents nie może pobrać zawartości - kod stanu 404, 401 albo 500
Błąd Web.Contents z kodem stanu 404 w Power Query pojawia się przy pobieraniu danych z API i stron WWW: zapytanie działało, a po zmianie parametru, dnia albo hasła odświeżenie przerywa komunikat DataSource.Error. Pokazujemy, jak odczytać kod stanu z komunikatu, co oznaczają kody 404, 401, 403, 429 i 500 oraz jak naprawić każdy przypadek. Przykłady sprawdziliśmy w polskim Excelu na API kursów walut NBP, którego używamy w lekcji o źródłach danych.
Zamiast danych edytor pokazuje żółty pasek z błędem, a odświeżenie tabeli w arkuszu się nie udaje. Tak wygląda komunikat, który dostaliśmy w Excelu, pobierając kurs euro z 1 stycznia 2026 roku:
DataSource.Error: Funkcja Web.Contents nie może pobrać zawartości z „https://api.nbp.pl/api/exchangerates/rates/A/EUR/2026-01-01/?format=json” (404): Not Found - Brak danychAngielski oryginał to Web.Contents failed to get contents from '{0}' ({1}): {2}. Komunikat ma trzy części: pełny adres żądania razem z parametrami, kod stanu HTTP w nawiasie i opis zwrócony przez serwer. Opis pochodzi z API, dlatego bywa po angielsku albo w języku serwera, jak „Brak danych” z API NBP. Część innych łączników, na przykład HDFS i HDInsight, zgłasza podobny błąd w wariancie {0} nie może pobrać zawartości z „{1}”. Kod stanu: {2}; opis: „{3}”.
Kod stanu HTTP to trzycyfrowa odpowiedź serwera na żądanie. Gdy serwer odpowiada kodem błędu, Web.Contents przerywa zapytanie i podaje ten kod w komunikacie. Każdy kod wskazuje inne miejsce do sprawdzenia:
Web.Contents ponawia takie żądanie do trzech razy, tak samo jak przy kodach 408, 503, 504 i 509.Query. Jeśli przeglądarka dostaje ten sam kod, przyczyna leży w adresie albo po stronie serwera, a nie w krokach zapytania.ApiKeyName z nazwą parametru, na przykład Web.Contents(adres, [ApiKeyName = "api_key"]), i wybierz typ Interfejs API sieci Web, w którym wpiszesz samą wartość klucza. Klucz w nagłówku (opcja Headers) może wymagać dostępu Anonimowy, bo część nagłówków silnik przyjmuje tylko w połączeniach anonimowych: Nagłówek „{0}” jest obsługiwany tylko w połączeniach anonimowych. (ang. The '{0}' header is only supported when connecting anonymously.).ManualStatusHandling (w opisie funkcji: kody stanu HTTP do obsługi ręcznej) wyłącza wbudowaną obsługę wskazanych kodów. Pobierz odpowiedź jako Odp = Web.Contents("https://api.nbp.pl/api/", [RelativePath = sciezka, Query = [format = "json"], ManualStatusHandling = {404}]), a w kolejnym kroku zwróć if Value.Metadata(Odp)[Response.Status] = 404 then null else Json.Document(Odp). Kodów 401 i 403 ta opcja w zwykłym zapytaniu nie obsłuży.Timeout = #duration(0, 0, 2, 0) dla dwóch minut.Kursy_NBP. Kod 500 zgłoś właścicielowi API razem z adresem z komunikatu.
Odśwież zapytanie (w edytorze Odśwież podgląd, w Excelu Odśwież wszystko) i sprawdź, czy żółty pasek zniknął. Przy obsłudze kodu 404 sprawdź oba przypadki: dla dnia z tabelą kursów zapytanie zwraca dane, a dla 1 stycznia 2026 roku w naszym teście zwróciło null zamiast błędu. Kod odpowiedzi podejrzysz w osobnym kroku formułą Value.Metadata(Odp)[Response.Status], a cały rekord metadanych (między innymi Content.Uri, Headers i Response.Status) zwraca Value.Metadata(Odp). Klucz API trzymaj w poświadczeniach, a nie w kodzie: poświadczenia zostają na komputerze, więc klucz nie wyjdzie razem z plikiem, a osoba, której przekażesz plik, poda własne dane logowania.
Wróć do listy: 88 najczęstszych pytań i problemów związanych z Power Query
Szkolenie Microsoft Excel - Power Query --> Dwa dni warsztatów z Excela: pobieranie danych z plików, folderów, SharePointa i baz SQL, ich czyszczenie i łączenie w Power Query, praca w języku M, a na koniec model danych i oparta na nim tabela przestawna. Prowadzi Sebastian Stasiak.
To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5
Komentarze (0)
Brak komentarzy...