Konwerter Fetch API na cURL
Wklej kod JavaScript Fetch API i otrzymaj gotową komendę cURL. Obsługa async/await, nagłówków, body i autoryzacji. Idealne do debugowania i dokumentacji API. Bezpłatnie.
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Metoda HTTP
z pola method; fetch() bez method wysyła GET
Nagłówki
z obiektu headers
Ciało żądania
treść pola body, trafia do --data-raw
Rozmiar wyniku
gotowe polecenie curl do wklejenia w terminal
curl \
-L \
--compressed \
-X POST \
'https://api.example.com/v1/orders' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
--data-raw '{"productId":42,"quantity":2,"notes":"Gift wrap, please"}'
| Kod fetch() | Metoda | Wynik curl |
|---|---|---|
| await fetch('https://api.example.com/v1/orders', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_TOKEN', 'Content-Type': 'application/json' }, body: JSON.stringify({ productId: 42, quantity: 2 }) }); | POST | curl -L --compressed -X POST 'https://api.example.com/v1/orders' -H 'Authorization: Bearer YOUR_TOKEN' -H 'Content-Type: application/json' --data-raw '{"productId":42,"quantity":2}' |
| Element fetch() | Odpowiednik curl | Co robi konwerter |
|---|---|---|
| fetch('https://…') | adres polecenia | pierwszy argument fetch — tekst w apostrofach, cudzysłowach albo backtickach — staje się adresem curl |
| method: 'POST' | -X POST | pole method z obiektu opcji; brak method oznacza GET — wtedy flaga -X nie jest dopisywana |
| headers: { 'X': 'Y' } | -H 'X: Y' | każda para klucz–wartość z obiektu headers (albo new Headers({…})) osobną flagą -H |
| body: JSON.stringify({…}) | --data-raw '{…}' | obiekt jest porządkowany do poprawnego JSON; gdy brak nagłówka Content-Type, dodawany jest application/json |
| body: 'tekst' / body: `tekst` | --data-raw | ciało tekstowe (string albo szablon) trafia do --data-raw bez zmian |
| cache, mode, credentials, signal | pomijane | opcje fetch() bez bezpośrednich odpowiedników w curl — konwerter tłumaczy tylko samo żądanie |
| .then() / .catch() | pomijane | obsługa odpowiedzi to kod otaczający, nie część żądania HTTP |
To narzędzie jest odwrotnością Konwertera cURL na Fetch API — razem pokrywają obie strony tłumaczenia żądań HTTP.
Warto wiedzieć — fetch() i curl w praktyce
Metoda: fetch nie zgaduje
fetch() bez pola method zawsze wysyła GET — nawet gdy ustawi body. curl zachowuje się inaczej: sama flaga -d zmienia metodę na POST. Konwerter dlatego zapisuje metodę wprost (-X), odwzorowując to, co faktycznie zrobi fetch(), a nie to, co zgadłby curl.
Ciało JSON i Content-Type
body: JSON.stringify({…}) trafia do --data-raw jako poprawny JSON. Gdy w headers nie ma Content-Type, konwerter dopisuje application/json — bez tego serwer często nie zrozumie żądania, mimo poprawnego ciała.
Cudzysłowy: powłoka ma znaczenie
Styl single (apostrofy) to zapis dla powłok POSIX — plik .sh gotowy do uruchomienia w Linuksie/macOS. Styl double jest przyjazny PowerShell, który nie łączy poleceń backslashem — dlatego zapis dla Windows pobierasz jako .txt i wklejasz jako jedną linię.
Co zostaje poza tłumaczeniem
Interceptory, credentials: 'include', AbortSignal czy polityka CORS dotyczą środowiska przeglądarki, nie samego żądania HTTP. Po przestawieniu na curl pilnuj też tokenów — polecenie z Authorization: Bearer zostaje w historii powłoki.
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćKonwerter Fetch API na cURL – komenda terminalna z kodu JS
Reverse-engineering żądania Fetch do postaci komendy cURL jest przydatny gdy: testujesz API w terminalu, tworzysz dokumentację, debugujesz żądania lub chcesz uruchomić to samo zapytanie z serwera. Narzędzie parsuje kod JavaScript (async/await lub .then()) i generuje kompletną komendę cURL z flagami.
Co jest parsowane z kodu Fetch
URL (pierwszy argument fetch()). method z opcji → -X METHOD. headers z opcji → -H "Nagłówek: wartość". body → -d lub --data-binary. credentials: "include" → -b (cookie forwarding). mode: "no-cors" → flaga --no-cors (informacyjna). signal (AbortController) → ignorowane w cURL.
Generowane flagi cURL
Podstawowe: -X POST -H "Content-Type: application/json" -d '{"key":"val"}'. Kompresja: --compressed (gdy Accept-Encoding: gzip). SSL skip (dev): -k lub --insecure. Verbose (debug): -v. Redirect follow: -L. Cookie jar: -c cookies.txt -b cookies.txt. Output do pliku: -o response.json.
Obsługa typów body
JSON (body: JSON.stringify({})): automatycznie dodaje -H "Content-Type: application/json" jeśli brakuje. FormData: generuje -F "field=value". URLSearchParams: --data-urlencode lub -d z query string. Binary blob: --data-binary z ostrzeżeniem o ograniczeniach.
Zastosowania w pracy deweloperskiej
Kopiuj żądania z Chrome DevTools (Copy as Fetch) → wklej tutaj → otrzymaj cURL do dokumentacji. Odtwórz żądanie klienta po stronie serwera dla debugowania. Udostępnij komendę innemu deweloperowi bez dzielenia się kodem JS. Integracja z narzędziami jak Postman, Insomnia (import cURL).
Jak działa konwersja: od składni JavaScript do komendy cURL
Narzędzie nie uruchamia kodu JavaScript i nie wysyła żadnego żądania do serwera. Działa jak uproszczony parser: skanuje wklejony tekst w poszukiwaniu wywołania fetch, wyznacza granice pierwszego argumentu (adresu) i drugiego argumentu (obiektu opcji), a następnie zamienia je na flagi curl. Wartości odczytywane są wyłącznie z literałów: łańcuchów w cudzysłowach, apostrofach oraz template stringów bez podstawień. Jeśli w miejscu adresu albo nagłówka stoi zmienna, wyrażenie warunkowe lub wywołanie funkcji, parser nie zna jej wartości w czasie działania i w tym miejscu wstawia placeholder bądź pomija pole.
Drugi etap to mapowanie jeden do jednego. Każdy rozpoznany klucz obiektu opcji ma przypisaną flagę: method staje się -X, każdy wpis w headers osobnym -H, ciało żądania trafia do -d, --data-binary albo -F w zależności od rozpoznanego typu. Kolejność flag w wyniku jest stała: metoda, adres, nagłówki, dane, opcje sieciowe, wyjście. curl nie wymaga takiego porządku, ale powtarzalny układ ułatwia porównywanie komend w dokumentacji i podczas przeglądu kodu.
Trzeci etap to kontrola spójności. Parser sprawdza, czy nawiasy i cudzysłowy są domknięte, czy obiekt opcji nie został urwany oraz czy typ ciała pasuje do nagłówka Content-Type. Świadomie ignoruje wszystko, co dzieje się poza samym wywołaniem: pętle, warunki, obsługę response.json(), kolejne żądania w łańcuchu oraz instrukcje po await. Efektem jest jedna komenda odpowiadająca jednemu wywołaniu fetch.
Przykład krok po kroku: zamówienie POST z nagłówkiem Authorization
- Wejście. Do pola konwertera trafia fragment: const res = await fetch("https://api.example.com/v1/orders?limit=20", { method: "POST", headers: { "Content-Type": "application/json", "Authorization": "Bearer TOKEN" }, body: JSON.stringify({ id: 7, status: "nowe" }), credentials: "include" });
- Adres. Parser rozpoznaje literał i przenosi go do komendy razem z parametrem limit=20. Nie zamienia go na --data-urlencode, bo w fetch parametry są już częścią adresu, a nie osobnym obiektem.
- Metoda. method: "POST" daje -X POST. Gdyby tego pola nie było, w wyniku nie pojawiłoby się -X i curl wykonałby GET.
- Nagłówki. Dwa wpisy w obiekcie to dwie osobne flagi: -H "Content-Type: application/json" oraz -H "Authorization: Bearer TOKEN", zapisane w kolejności występowania w kodzie. Wartość TOKEN pozostaje zwykłym tekstem, bo narzędzie nie wie, co podstawia się tam w działającej aplikacji.
- Ciało. JSON.stringify({ id: 7, status: "nowe" }) zamienia się na -d '{"id":7,"status":"nowe"}'. Nagłówek Content-Type nie jest dopisywany drugi raz, ponieważ już występuje w opcjach żądania.
- Wynik. Powstaje komenda: curl -X POST 'https://api.example.com/v1/orders?limit=20' -H 'Content-Type: application/json' -H 'Authorization: Bearer TOKEN' -d '{"id":7,"status":"nowe"}' -b. Flaga -b pochodzi z credentials: "include". Przed uruchomieniem podmień TOKEN na prawdziwą wartość i sprawdź, czy w Twojej powłoce działają pojedyncze cudzysłowy.
Mapowanie pól Fetch na flagi cURL – tabela referencyjna
| Pole w kodzie Fetch | Flaga lub efekt w cURL | Kiedy to istotne |
|---|---|---|
| redirect: "follow" | -L | Gdy endpoint odpowiada kodem 301 lub 302, a chcesz zobaczyć treść docelową. |
| redirect: "manual" | brak flagi -L | Gdy badasz samą odpowiedź przekierowania i jej nagłówki Location. |
| cache: "no-store" | -H "Cache-Control: no-cache" | Gdy testujesz zachowanie serwera lub pośrednika przy wymuszonym odświeżeniu. |
| headers: new Headers({...}) | po jednej fladze -H na każdy wpis | Gdy kod buduje nagłówki obiektem Headers zamiast zwykłym literałem. |
| body: new URLSearchParams(...) | -G --data-urlencode | Gdy parametry mają trafić do query stringa, a nie do treści żądania. |
| keepalive: true | brak odpowiednika | Curl kończy żądanie razem z procesem, więc nie podtrzymuje go w tle. |
| integrity: "sha384-..." | brak odpowiednika | Sprawdzenie integralności podzasobu wykonuje przeglądarka, nie serwer ani terminal. |
Praktyczne wskazówki przed skopiowaniem komendy
- Wklejaj kod z literałami. Najlepiej działa fragment, w którym adres, nagłówki i ciało są zapisane wprost. Kod z konfiguracją wstrzykiwaną z zewnątrz wymaga ręcznego uzupełnienia placeholderów.
- Nie zostawiaj prawdziwych tokenów w schowku. Komenda z nagłówkiem Authorization, która trafi do dokumentacji lub na czat, jest równoznaczna z ujawnieniem danych dostępowych. Podmień wartość na placeholder przed udostępnieniem.
- Sprawdź quoting w swojej powłoce. Pojedyncze cudzysłowy działają w bashu i zsh, natomiast w PowerShell oraz cmd trzeba użyć innych znaków albo pliku z ciałem żądania.
- Duże ciała trzymaj w pliku. Dla rozbudowanego JSON-a wygodniej zapisać payload do pliku i użyć --data-binary @payload.json niż wklejać wielolinijkowy łańcuch do terminala.
- Porównaj wynik z zachowaniem przeglądarki. Jeśli fetch zwracał dane, a curl zwraca 403, sprawdź nagłówki User-Agent, Origin i ciasteczka, zanim uznasz komendę za błędną.
Czego konwerter nie uwzględnia
- Analiza statyczna zamiast wykonania kodu. Konwerter nie rozwiąże zmiennych, konkatenacji ani funkcji budujących opcje. Dla parsera to nieznane wartości, więc w wyniku pojawi się placeholder albo luka.
- Brak kontekstu przeglądarki. Ciasteczka, nagłówek Origin, polityka CORS i uprawnienia service workera nie są częścią kodu fetch, dlatego nie da się ich odtworzyć z wklejonego fragmentu.
- Logika wokół żądania zostaje poza zakresem. Ponowienia, opóźnienia, interceptory, kolejność kilku wywołań i przetwarzanie odpowiedzi nie trafiają do wyniku — powstaje jedna komenda, a nie cała funkcja.
- Różnice między powłokami. Wygenerowana komenda jest zapisana pod powłokę uniksową. W PowerShell, cmd i części konfiguracji Windows Terminala cudzysłowy oraz apostrofy trzeba poprawić ręcznie.
Najczęstsze pytania
Czy konwerter obsługuje wszystkie warianty składni Fetch?
Narzędzie obsługuje: fetch(url), fetch(url, options), const r = await fetch(...), .then(r=>r.json()). Nie obsługuje: dynamicznie generowanych URL przez zmienne (parseowanie statyczne), custom Request object (new Request(url, opts)).
Jak skopiować żądanie z Chrome jako Fetch?
Chrome DevTools → Network → kliknij żądanie → prawy klik → Copy → "Copy as fetch". Wynik wklej do narzędzia. Alternatywnie "Copy as cURL" – nie potrzebujesz wtedy konwersji.
Czy cURL działa na Windows?
Tak – cURL jest dostępny na Windows 10+ (wbudowany w PowerShell i CMD). Dla starszych: zainstaluj curl.exe (curl.se/windows). Cudzysłowy: na Windows CMD użyj podwójnych cudzysłowów zamiast pojedynczych.
Jaka jest komenda cURL do pobrania JSON z API?
curl -s -H "Accept: application/json" https://api.example.com/data | jq. Flaga -s: silent (bez progressbara). jq: formatowanie JSON. Zapis do pliku: curl -o data.json URL. Z auth: curl -H "Authorization: Bearer TOKEN" URL.
Jak dodać cURL do CI/CD pipeline?
cURL jest dostępny w większości Docker images (ubuntu, alpine + apt/apk). Przykład health check: curl --fail --max-time 5 https://app.example.com/health. Jeśli zwróci kod 4xx/5xx lub timeout – docker/GitHub Actions traktuje krok jako failure.
Jak zamienić fetch na curl?
Wklej fragment kodu z wywołaniem fetch do pola konwertera i uruchom zamianę. Narzędzie odczyta adres, metodę, nagłówki i ciało, a następnie wypisze gotową komendę curl do skopiowania.
Dlaczego w wygenerowanej komendzie brakuje mojego ciała żądania?
Najczęściej dlatego, że ciało powstaje w zmiennej albo w funkcji, a nie w literale. Parser nie wykonuje kodu, więc widzi tylko nazwę zmiennej — w takiej sytuacji wstaw treść ręcznie jako -d lub --data-binary.
Czy konwerter obsługuje axios i inne biblioteki?
Nie, obsługuje wyłącznie składnię Fetch API, w tym warianty z async/await oraz z .then(). Kod z axios, gotowych klientów HTTP albo własnych wrapperów trzeba najpierw przełożyć na fetch lub napisać komendę ręcznie.
Dlaczego curl zwraca 403, a fetch w przeglądarce działa?
Przeglądarka dokłada nagłówki, o których sam kod nie mówi: Origin, Referer, User-Agent i ciasteczka przypisane do domeny. Serwer może je weryfikować, dlatego żądanie z terminala wygląda inaczej niż to samo żądanie z karty przeglądarki.
Czym różni się curl od fetch?
fetch to interfejs przeglądarki i środowisk JavaScript, który działa w kontekście strony i podlega polityce CORS. curl to samodzielny program w terminalu, który wysyła żądanie spoza przeglądarki i nie stosuje ograniczeń tej samej domeny.
Powiązane narzędzia: konwerter cURL na Fetch API, generator testowego JSON API i walidator JSON.