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.