Инструменты
Руководства

Конвертер curl

Разработка

Преобразуйте команду curl в fetch, axios, Python, Go, Java и HTTPie — в реальном времени, с вкладками для разных языков.

100 % на клиенте Без бэкенда

Удалённые URL не запрашиваются; вставьте JSON напрямую.

Ввод
Вставьте команду curl, чтобы увидеть преобразованный код.
На этой странице

Что такое конвертер curl?#

curl — ближайшее к универсальному языку, что есть у HTTP. Каждая панель DevTools браузера, каждый сайт с документацией к API и каждый тикет в поддержке в итоге вручают вам команду curl — «Copy as cURL» это способ путешествия запроса из браузера в баг-репорт. Проблема в том, что вставленную команду curl редко можно запустить в кодовой базе как есть. Ваш сервис написан на Python, или Go, или на браузерном fetch; вы не хотите вызывать curl через shell, вам нужен эквивалентный вызов в HTTP-клиенте, которым вы уже пользуетесь.

Эта страница наводит мост. Вставьте команду curl слева — и она разбирает shell-синтаксис (флаги, кавычки, переносы строк, заголовки, тело, auth) в структурированный запрос, а затем выдаёт эквивалентный код сразу для шести целей: браузерный fetch, axios, Python requests, Go net/http, Java HttpURLConnection и httpie. Вы читаете по вкладкам, копируете подходящую вашему стеку и идёте дальше.

Парсинг выполняется целиком в браузере. Вставляемая команда никогда не касается сервера, что важно, потому что реальные команды curl часто содержат bearer-токены, basic-auth-учётные данные или подписанные cookie.

Как пользоваться#

  1. Вставьте команду curl в панель Ввод слева. Можно вставить с ведущим словом curl или без него — работает и так, и так. Многострочные команды, объединённые завершающим \, поддерживаются, как и команды, скопированные прямо из терминала, где каждый флаг на своей строке.
  2. Нажмите Пример, чтобы загрузить реалистичный пример, если хотите сначала увидеть форму, или Очистить, чтобы стереть панель.
  3. Выберите целевой язык на панели вкладок над выводом: fetch, axios, python, go, java или httpie. Все шесть генерируются из одного разбора, поэтому переключение вкладок мгновенно — повторного запуска нет.
  4. Читайте сгенерированный код в панели. Используйте Копировать на панели вкладок, чтобы забрать его.
  5. Следите за строкой состояния под панелями. Если парсер встретил флаг, который не моделируется (редирект в файл, настройка прокси), он явно скажет об этом, а не выбросит его молча.

Ключевые возможности#

  • Настоящий shell-токенайзер, а не регексная нарезка. Одинарные кавычки, двойные кавычки, ANSI-C $'...' (с экранированиями \n, \t, \x41, é), перенос строки через backslash-newline и разница между "a\b" и 'a\b' обрабатываются так, как их обработал бы bash. Наивные конвертеры, режущие по пробелам, ломаются, как только значение заголовка содержит пробел.
  • Шесть целей из одного разбора. Вы видите рядом fetch, axios, Python, Go, Java и httpie. Если не уверены, что выбрать — fetch или axios, — можно сравнить обработку одного и того же заголовка auth в два щелчка.
  • Интеллект тела запроса. Когда запрос несёт Content-Type: application/json, эмиттер Python передаёт его через ключевое слово json=, чтобы dict-образное тело ушло корректно; в остальных случаях откатывается к data=.
  • Basic auth декодируется один раз. Флаг -u user:pass становится btoa("user:pass") в fetch, блоком auth в axios, кортежем auth= в requests и SetBasicAuth в Go — каждый идиоматично для своего языка.
  • Неизвестные флаги сообщаются, а не проглатываются. -o output.txt или --proxy всплывают в строке состояния как «неизвестные аргументы», поэтому вас никогда молча не введут в заблуждение, будто конверсия сохранила редирект или прокси, которые она на деле отбросила.
  • Без бэкенда, без утечек. Команда токенизируется в памяти собственным скриптом страницы. Никакого сетевого вызова, уносящего вставленный токен куда-либо, нет.

Разбор примера#

Загрузите Пример (или вставьте эквивалент того, что выдает DevTools браузера при «Copy as cURL» для JSON POST):

curl -X POST https://example.com/api/v1/users \
  -H 'Authorization: Bearer tok' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Alice","role":"admin"}'

Переключитесь на вкладку fetch и получите:

const response = await fetch("https://example.com/api/v1/users", {
  method: "POST",
  headers: {
    "Authorization": "Bearer tok",
    "Content-Type": "application/json",
  },
  body: "{\"name\":\"Alice\",\"role\":\"admin\"}",
});

Переключитесь на вкладку python. Поскольку Content-Type — JSON, тело идёт через ключевое слово json=:

import requests

url = 'https://example.com/api/v1/users'
headers = {
    'Authorization': 'Bearer tok',
    'Content-Type': 'application/json',
}
payload = '{"name":"Alice","role":"admin"}'
response = requests.request('POST', url, headers=headers, json=payload)
print(response.status_code)

Та же команда также немедленно доступна на вкладках go, java, axios и httpie — шесть конверсий по цене одной вставки.

FAQ#

Пишет «неизвестные аргументы» для моей команды. Что пропущено?#

Парсер моделирует флаги curl, которыми описывается запрос — method, URL, заголовки, тело, basic auth, --compressed, -k, -L. Флаги, описывающие поведение самого curl (например, -o для записи тела в файл, --proxy, --connect-timeout, --cert), не переводятся, потому что у них нет эквивалента в вызове fetch. Они собираются и показываются в строке состояния, чтобы вы знали: их отбросили намеренно, а не потеряли.

Можно ли конвертировать команду с квотированием $'...' ANSI-C?#

Да. Заголовки и тела, скопированные из терминалов, иногда приходят обёрнутыми в $'...', чтобы escape-последовательности вроде \n или \t интерпретировались shell’ом. Токенайзер понимает ANSI-C-квотирование и декодирует \n, \t, \xHH, \uHHHH, \UHHHHHHHH и простые экранирования, поэтому байты, которые видит конвертер, совпадают с теми, что отправил бы curl.

Почему мой Python-вывод иногда использует json=, а иногда data=?#

Эмиттер смотрит на ваши заголовки. При наличии Content-Type: application/json тело идёт через ключевое слово json=, что позволяет requests поставить заголовок и правильно закодировать payload. Для любого другого content-type (form-encoded, plain text, multipart) он откатывается к data=, потому что json= там было бы ошибочно.

Отправляет ли инструмент запрос за меня?#

Нет, и это намеренно. Этот инструмент лишь переводит команду в код; он никогда её не исполняет. Сгенерированный сниппет выполняется в вашей собственной программе, под вашими же учётными данными, где вы можете осмотреть его до того, как он что-то сделает в live-режиме.