Kreator i konwerter poleceń curl
Twórz polecenia curl i konwertuj je na fetch, Python i HTTPie.
O tym narzędziu
Uzupełnij metodę, URL, nagłówki, treść i uwierzytelnianie, aby otrzymać gotowe do uruchomienia polecenie curl, albo wklej istniejące polecenie curl, aby je edytować. Każde żądanie jest też pokazywane jako JavaScript fetch, Python requests i HTTPie. Nic nie jest wysyłane: narzędzie tylko pisze polecenia.
Jak z tego korzystać
- Wklej istniejące polecenie curl, aby je zaimportować, np. z narzędzi deweloperskich przeglądarki (Copy as cURL).
- Albo ustaw metodę i URL, a potem dodaj nagłówki, uwierzytelnianie oraz treść JSON, formularz lub surową treść.
- Wybierz opcje, np. podążanie za przekierowaniami lub pokazywanie nagłówków odpowiedzi.
- Skopiuj wynik jako curl, JavaScript fetch, Python requests lub HTTPie.
Pytania
- Jak wysłać JSON za pomocą curl?
- Użyj -H 'Content-Type: application/json' razem z --data-raw '{"key":"value"}'. Nowsze wersje curl mają też --json, które ustawia za Ciebie nagłówki Content-Type i Accept. Wybierz tutaj JSON jako typ treści, a odpowiednie flagi zostaną dodane.
- Czy to narzędzie wysyła moje żądanie?
- Nie. Narzędzie tylko pisze kod. Nic nie opuszcza Twojej przeglądarki, więc można bezpiecznie wklejać polecenia zawierające tokeny, choć przed udostępnieniem polecenia dobrze jest zastąpić prawdziwe sekrety symbolami zastępczymi.
- Czym różni się -d od --data-raw?
- Przy -d wartość zaczynająca się od @ jest wczytywana z pliku. --data-raw wysyła tekst dokładnie tak, jak go zapisano, co jest bezpieczniejsze dla JSON-a i wartości, które mogą zaczynać się od @.
- Dlaczego curl nie podąża za przekierowaniami?
- Domyślnie curl pokazuje samą odpowiedź z przekierowaniem. Dodaj -L (Podążaj za przekierowaniami), aby przejść pod nowy adres. fetch i większość bibliotek podąża za przekierowaniami automatycznie.
- Które opcje curl można zaimportować?
- Metoda, URL, nagłówki, opcje danych, --json, -u, user agent, cookies, referer, -G, -L, -i, -s, -k, -v, --head i --compressed. Pola multipart -F i inne rzadkie opcje są pomijane z adnotacją.
- Jak wysłać dane formularza przez curl?
- curl -d "name=Ada&role=admin" URL wysyła formularz zakodowany jako URL i sam przełącza metodę na POST. Użyj --data-urlencode "q=hello world", gdy wartość zawiera spacje lub symbole. Przesyłanie plików wymaga multipart -F "file=@photo.jpg", które to narzędzie pomija przy imporcie, więc dodaj je ręcznie.
- Jak dodać parametry zapytania do żądania GET w curl?
- Umieść je w URL-u i ujmij cały URL w podwójne cudzysłowy, bo & i ? mają znaczenie dla powłoki. Możesz też trzymać je osobno przez -G --data-urlencode "q=red shoes", co dopisuje zakodowane wartości do URL-a zamiast wysyłać treść. Import tutaj rozumie -G i przenosi wartości do URL-a.
- Jak zobaczyć nagłówki odpowiedzi w curl?
- -i wypisuje linię statusu i nagłówki przed treścią. -I (--head) wysyła żądanie HEAD i pokazuje tylko nagłówki, ale niektóre serwery odpowiadają na HEAD inaczej niż na GET. -v pokazuje też nagłówki żądania oraz handshake TLS, co pomaga przy debugowaniu przekierowań, uwierzytelniania i błędów certyfikatów.
Jak przekonwertować curl na Python requests?
Wklej polecenie curl do pola importu i wybierz Python. Nagłówki stają się słownikiem, treść JSON staje się json=payload, więc requests ją serializuje i ustawia Content-Type, a treści formularzy i surowe treści stają się data=payload. Basic auth z -u zamienia się w auth=(user, password), a -k w verify=False. Token Bearer zostaje w nagłówkach jako wpis Authorization.
Dwie linie mogą Cię zaskoczyć. requests domyślnie podąża za przekierowaniami, a curl nie, więc kod dodaje allow_redirects=False, chyba że polecenie curl miało -L. requests nie ma też domyślnego limitu czasu i może czekać w nieskończoność na zawieszony serwer, więc dodawane jest timeout=30. Zostaw je albo zmień liczbę. To samo żądanie jest też dostępne jednym kliknięciem jako fetch w JavaScripcie i HTTPie.
Dlaczego żądanie działa w curl, ale nie w fetch?
Zwykle przyczyną jest CORS. curl wysyła żądanie i wypisuje to, co wróci, ale przeglądarka pozwala Twojej stronie odczytać odpowiedź z innego originu tylko wtedy, gdy serwer zezwala na to nagłówkiem Access-Control-Allow-Origin. Przeglądarki odmawiają też ustawiania z kodu niektórych nagłówków, takich jak Cookie i Host. Ten sam kod fetch uruchomiony w Node nie podlega kontroli CORS, więc zachowuje się jak curl.
Aby mieć działający punkt wyjścia, otwórz kartę Network w narzędziach deweloperskich przeglądarki, kliknij żądanie prawym przyciskiem i wybierz Copy as cURL. W Windows wybierz wariant bash, bo wariant cmd używa innego stylu escapowania. Skopiowane polecenie zawiera wiele nagłówków przeglądarki, których rzadko potrzebujesz, jak sec-ch-ua i długie ciasteczka, więc przed konwersją usuń je z listy nagłówków.
HTTPie czy curl: porównanie składni
curl jest zainstalowany niemal wszędzie, także w macOS i Windows 10 lub nowszym. HTTPie (polecenie http) ma krótszą składnię i koloruje wynik. Nagłówki zapisuje się jako Name:value bez -H, pola formularza jako name=value z --form, --follow zastępuje -L, a --verify=no zastępuje -k. Wygenerowane polecenie HTTPie przekazuje treści JSON przez here-string, co działa w bash i zsh, ale nie w PowerShellu.
Przy Basic auth zarówno curl -u user:password, jak i HTTPie -a user:password budują za Ciebie nagłówek Authorization. Dane logowania są tylko zakodowane w Base64, a nie zaszyfrowane, co pokaże narzędzie Kodowanie i dekodowanie Base64, więc zawsze wysyłaj je przez HTTPS. Dla tokenów curl używa -H "Authorization: Bearer TOKEN", a HTTPie -A bearer -a TOKEN. Gdy importujesz polecenie curl, nagłówek Bearer automatycznie trafia do pól Uwierzytelnianie.
Coś nie działa albo wynik wygląda na błędny? Zgłoś problem z tym narzędziem