Invoke-WebRequest

Pobiera zawartość strony WWW lub wysyła żądanie HTTP.

Invoke-WebRequest to wbudowany w PowerShell cmdlet do wysyłania żądań HTTP i HTTPS. Pobierzesz nim stronę WWW, ściągniesz plik, wywołasz REST API albo wyślesz dane formularza. W odróżnieniu od zwykłego pobierania zwraca bogaty obiekt: kod statusu, nagłówki, surową treść, a w trybie z parsowaniem także listę linków, obrazków i pól formularzy. To windowsowy odpowiednik curl czy wget z Linuksa, dlatego w Windows PowerShell ma nawet aliasy curl, wget i iwr.

Składnia i najważniejsze opcje

Podstawowa forma to Invoke-WebRequest [-Uri] [opcje].

  • -Uri — adres, pod który leci żądanie. Parametr pozycyjny, więc często podajesz go bez nazwy.
  • -OutFile <ścieżka> — zapisuje treść odpowiedzi do pliku zamiast trzymać ją w pamięci. Idealne do pobierania plików.
  • -Method — metoda HTTP: Get (domyślna), Post, Put, Delete, Patch itd.
  • -Headers — własne nagłówki, np. autoryzacja czy Accept, podane jako tablica skrótów.
  • -Body — treść żądania: ciąg znaków, hashtable albo JSON wysyłany przy Post/Put.
  • -ContentType — typ wysyłanych danych, np. application/json.
  • -UseBasicParsing — pomija parsowanie DOM silnikiem Internet Explorera. W PowerShell 6+ to już zachowanie domyślne, w Windows PowerShell 5.1 często ratuje skrypt.
  • -SkipCertificateCheck — (PowerShell 6+) ignoruje błędy certyfikatu TLS. Do testów, nie na produkcję.
  • Przykłady użycia

    • Invoke-WebRequest -Uri "https://learningzone.pl" — pobiera stronę i zwraca obiekt z treścią, statusem i nagłówkami.
    • Invoke-WebRequest -Uri "https://example.com/plik.zip" -OutFile "C:\temp\plik.zip" — ściąga plik prosto na dysk.
    • (Invoke-WebRequest -Uri "https://api.example.com/status").StatusCode — sprawdza sam kod odpowiedzi, np. czy serwis odpowiada 200.
    • Invoke-WebRequest -Uri "https://api.example.com/users" -Method Post -Body (@{name="Ola"} | ConvertTo-Json) -ContentType "application/json" — wysyła JSON metodą POST do API.
    • Invoke-WebRequest -Uri "https://api.example.com/me" -Headers @{Authorization="Bearer TOKEN"} — dodaje nagłówek z tokenem autoryzacji.

    Częste błędy i pułapki

    Najczęstsza wpadka to zwracany obiekt zamiast czystego tekstu: jeśli chcesz samą treść strony, sięgnij po właściwość .Content. Pamiętaj też, że dla pracy z REST API zwykle wygodniejszy jest Invoke-RestMethod, bo sam parsuje JSON do obiektu.

    Druga pułapka: aliasy. W Windows PowerShell 5.1 curl i wget to tak naprawdę Invoke-WebRequest, więc skrypty przeklejone z Linuksa robią coś zupełnie innego niż prawdziwy curl. W PowerShell 7+ tych aliasów nie ma — wywołujesz wtedy systemowy curl.exe.

    Trzecia: w 5.1 cmdlet potrafi się wieszać na parsowaniu DOM lub krzyczeć o niezalogowanym Internet Explorerze. Dodaj -UseBasicParsing i będzie spokój. -SkipCertificateCheck działa dopiero od wersji 6 i jest tylko do testów, bo wyłącza weryfikację TLS.

    Powiązane komendy: Invoke-RestMethod, Start-BitsTransfer, curl, wget.