Конвертер curl
РазработкаПреобразуйте команду curl в fetch, axios, Python, Go, Java и HTTPie — в реальном времени, с вкладками для разных языков.
Удалённые URL не запрашиваются; вставьте JSON напрямую.
На этой странице
Что такое конвертер 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.
Как пользоваться#
- Вставьте команду curl в панель Ввод слева. Можно вставить с ведущим словом
curlили без него — работает и так, и так. Многострочные команды, объединённые завершающим\, поддерживаются, как и команды, скопированные прямо из терминала, где каждый флаг на своей строке. - Нажмите Пример, чтобы загрузить реалистичный пример, если хотите сначала увидеть форму, или Очистить, чтобы стереть панель.
- Выберите целевой язык на панели вкладок над выводом: fetch, axios, python, go, java или httpie. Все шесть генерируются из одного разбора, поэтому переключение вкладок мгновенно — повторного запуска нет.
- Читайте сгенерированный код в панели. Используйте Копировать на панели вкладок, чтобы забрать его.
- Следите за строкой состояния под панелями. Если парсер встретил флаг, который не моделируется (редирект в файл, настройка прокси), он явно скажет об этом, а не выбросит его молча.
Ключевые возможности#
- Настоящий 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-режиме.