Pack Camo

Конвертер cURL у код

Перетворює команду curl на fetch, axios, Python requests, Go, PHP та інші.

Усе виконується локально — нічого не надсилається на сервер.

Команда curl

POST api.example.com

fetch

23 рядки

// Browsers do not let scripts set Cookie; fetch ignores them.
const response = await fetch("https://api.example.com/v1/orders?expand=items", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: "Bearer sk_test_4eC39HqLyjWDarjtT1zdp7dc",
    Cookie: "session=abc123; theme=dark",
  },
  body: JSON.stringify({
    "customer": "cus_42",
    "items": [
      {
        "sku": "TSHIRT-M",
        "qty": 2
      }
    ],
    "gift": false,
    "note": null
  }),
  signal: AbortSignal.timeout(30000),
});

console.log(response.status, await response.text());

Вставте команду 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. 1Скопіюйте запит як curl. У Chrome, Edge або Firefox відкрийте інструменти розробника, перейдіть на вкладку Network, клацніть запит правою кнопкою й виберіть Copy › Copy as cURL. Підходять і варіант для bash, і варіант для Windows cmd.
  2. 2Вставте команду в ліву панель. Багаторядкові команди з перенесеннями через \ або ^ теж підійдуть.
  3. 3Виберіть цільову мову: fetch, axios, Node.js, Python, Go, PHP або Rust, чи JSON, щоб побачити розібраний запит.
  4. 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.