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ć

  1. Wklej istniejące polecenie curl, aby je zaimportować, np. z narzędzi deweloperskich przeglądarki (Copy as cURL).
  2. Albo ustaw metodę i URL, a potem dodaj nagłówki, uwierzytelnianie oraz treść JSON, formularz lub surową treść.
  3. Wybierz opcje, np. podążanie za przekierowaniami lub pokazywanie nagłówków odpowiedzi.
  4. 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