Вставте команду curl і отримайте робочий код
Цей конвертер перетворює команду curl на такий самий HTTP-запит мовою JavaScript fetch, axios, Node.js, Python requests, Go net/http, розширенням curl для PHP або Rust reqwest. Він читає curl так само, як ваша оболонка і сам curl: одинарні й подвійні лапки, рядки $'…', перенесення рядків, об'єднані прапорці на кшталт -sSL, повторювані дані -d і multipart-поля -F. Заголовки, cookie, авторизація basic і bearer, тіла JSON, тайм-аути й налаштування TLS переносяться, а все, що не вдається перекласти, позначається. Команда розбирається у вашому браузері й нікуди не надсилається, тож токени й cookie в ній залишаються приватними.
Як перетворити команду curl на код
- 1Скопіюйте запит як curl. У Chrome, Edge або Firefox відкрийте інструменти розробника, перейдіть на вкладку Network, клацніть запит правою кнопкою й виберіть Copy › Copy as cURL. Підходять і варіант для bash, і варіант для Windows
cmd. - 2Вставте команду в ліву панель. Багаторядкові команди з перенесеннями через
\або^теж підійдуть. - 3Виберіть цільову мову: fetch, axios, Node.js, Python, Go, PHP або Rust, чи JSON, щоб побачити розібраний запит.
- 4Прочитайте примітки під кодом про прапорці, які було проігноровано або які потребують уваги, а потім скопіюйте код або завантажте його як файл.
Що перетворюється
- Метод і URL
- -X/--request, --url, -G/--get (дані переносяться в рядок запиту), -I/--head, -T/--upload-file (PUT). Без -X метод обирається так само, як у curl: POST, якщо є тіло, інакше GET.
- Заголовки
- -H/--header, -A/--user-agent, -e/--referer, -b/--cookie і -r/--range. Повторювані заголовки об'єднуються.
- Тіла запиту
- -d/--data, --data-raw, --data-binary і --data-urlencode (з'єднуються через &, як у curl), --json і multipart-поля -F/--form, зокрема завантаження файлів з ;type= і ;filename=.
- Авторизація
- -u/--user для basic-авторизації, --digest, --oauth2-bearer та облікові дані, записані в URL.
- Параметри з'єднання
- -k/--insecure, -L/--location, --compressed, -m/--max-time і -x/--proxy, якщо в цільовій мові є відповідник.
Тіла JSON стають справжніми об'єктами
Якщо тіло — JSON, бо так зазначено в Content-Type або бо це очевидно, його буде відформатовано і, де мова дозволяє, записано як нативне значення: об'єкт, переданий у JSON.stringify для fetch, звичайний об'єкт для axios і словник, переданий як json= для Python requests, причому true, false і null перетворюються на True, False і None. Таке набагато простіше редагувати, ніж екрановий рядок. Вимкніть Форматувати тіла JSON, щоб зберегти тіло байт у байт.
fetch у браузері та Node.js
Дві цілі fetch відрізняються, бо браузери обмежують те, що може надсилати сторінка. Скрипт у браузері не може задати Cookie, Referer, Host, Accept-Encoding чи будь-який заголовок Sec-, не може пропустити перевірку сертифіката й не може читати файли за шляхом. Ціль для браузера повідомляє, які заголовки буде відкинуто. Ціль Node.js уміє все це: файли читаються через openAsBlob і readFile, а --insecure або проксі стають dispatcher undici.
Щоб дізнатися, що означає статус відповіді після виконання запиту, перегляньте довідник кодів стану HTTP. Значення параметрів запиту, які потрібно екранувати, можна закодувати URL-кодувальником.
Правила лапок враховано
Більшість помилок конвертації пов'язана з лапками. У POSIX-оболонці одинарні лапки зберігають усе буквально, подвійні й далі обробляють \" і \$, а $'…' розуміє екранування на кшталт \n і \x41. Зворотна скісна риска в кінці рядка продовжує команду. Windows cmd натомість використовує ^ для екранування й перенесень — саме так виглядає результат «Copy as cURL (cmd)». Токенізатор дотримується кожного з цих правил, тож ваш код надсилає саме те тіло, яке надіслав би curl.
Усе, що йде після конвеєра, крапки з комою чи перенаправлення, наприклад | jq ., належить оболонці, а не curl, і ігнорується з приміткою.
Поширені запитання
- Чи надсилається моя команда curl на сервер?
- Ні. Команда розбирається, а код генерується у вашому браузері. Токени, cookie й паролі з неї ніколи не залишають ваш пристрій.
- Як скопіювати запит як curl з браузера?
- Відкрийте інструменти розробника (F12), виберіть вкладку Network, клацніть запит правою кнопкою й виберіть Copy, потім Copy as cURL. У Windows сюди можна вставити як версію для bash, так і для cmd.
- Які параметри curl підтримуються?
- Параметри, що визначають запит: метод, URL, заголовки, cookie, усі варіанти -d, --json, форми -F, авторизація -u, -G, -I, -T, -L, -k, --compressed, --max-time і --proxy. Параметри виводу, як-от -s, -o і -v, не впливають на запит і ігноруються.
- Чому в коді fetch для браузера немає деяких заголовків?
- Браузери забороняють скриптам задавати заголовки на кшталт Cookie, Referer, Host і Accept-Encoding, і fetch мовчки їх відкидає. Якщо їх потрібно надіслати, використовуйте ціль Node.js.
- Як перетворюється завантаження файлів?
- Поле -F на кшталт file=@photo.jpg стає multipart-полем файлу, яке читає photo.jpg з диска в Node.js, Python, Go, PHP і Rust. У fetch для браузера використовується файл, вибраний через <input type="file">, бо сторінки не можуть читати файли за шляхом.
- Що робить --data-urlencode?
- Він кодує значення відсотковим кодуванням перед надсиланням, тож name=a b&c надсилається як name=a%20b%26c. Конвертер застосовує те саме кодування, тому згенерований код надсилає ті самі байти.
- Чи переходить curl за перенаправленнями?
- Лише якщо вказати -L. Більшість HTTP-бібліотек типово переходять за перенаправленнями, тож згенерований код зазвичай робить це в будь-якому разі; розширення curl для PHP робить це, лише коли вказано -L.