Конвертер cURL

Конвертируй cURL-команду в код — Python, JavaScript, Java, PHP, Go, Ruby и C#

Правый клик по запросу в DevTools, «Copy as cURL», вставил сюда — и тот же запрос лежит перед тобой кодом на Java, JavaScript, Python, PHP, Go, Ruby или C#. URL, метод, заголовки, куки и тело переносятся как есть, поэтому скрапер стартует ровно с того, что отправлял браузер. Разбор и генерация идут в браузере: команда с сессионной кукой или токеном не покидает машину.

Команда cURL
Язык
Сгенерированный код
Вставь cURL-команду выше — код появится здесь…

Как использовать

  1. 1Скопируй запрос как cURLВ DevTools Chrome или Firefox открой Network, правый клик по запросу → Copy → Copy as cURL. Chrome под Windows предлагает два варианта, bash и cmd — понятны оба, включая cmd с экранированием кареткой (^).
  2. 2Вставь командуОдной строкой или несколькими, с переносами через обратный слэш или без них. Postman, Insomnia и большинство документаций API отдают тот же формат.
  3. 3Выбери язык и клиентJava, JavaScript, Python, PHP, Go, Ruby или C#. Там, где у языка несколько ходовых клиентов, они лежат в списке «Клиент»: java.net.http, OkHttp или Apache HttpClient для Java; fetch или axios для JavaScript.
  4. 4Забери кодИмпорты, словарь заголовков и тело запроса уже на месте — сниппет работает как есть, заглушек подставлять не надо.
  5. 5Проверь, что запрос ещё живойВ команде лежат куки того момента, когда ты её забрал из браузера. Если код отвечает 403 там, где cURL отвечал 200, отправь тот же запрос через Отправку запросов и посмотри, что реально отвечает сервер.

Примеры

curl в Python (requests)
curl -X POST … -d '{"q":1}' → requests.post(url, headers=headers, data=data)
Скрипт на requests со словарём заголовков и собранным телом, в конце print(response.text).
curl в JavaScript (fetch)
const options = { method: "POST", headers: {…}, body: "…" } → fetch(url, options)
Чистый fetch без зависимостей — работает в Node 18+ и в браузере. Если в проекте уже axios, переключи клиент.
curl в Java (java.net.http)
HttpRequest.newBuilder().uri(URI.create(url)).method("GET", …).build()
Готовый класс Main на клиенте из JDK, без сторонних библиотек. OkHttp и Apache HttpClient 5 — соседний пункт списка.
Заголовки становятся словарём
-H 'Authorization: Bearer eyJ…' → .header("Authorization", "Bearer eyJ…")
Каждый -H переносится дословно — Authorization, Referer, длинный User-Agent Chrome, набор sec-ch-ua. Ничего не теряется и не переставляется.
Куки остаются заголовком Cookie
-b 'sid=8f2c…; lang=ru' → "Cookie": "sid=8f2c…; lang=ru"
Флаг -b сворачивается в обычный заголовок Cookie — именно он и нужен сессии скрапера.
Basic-авторизация превращается в заголовок
-u admin:secret → "Authorization": "Basic YWRtaW46c2VjcmV0"
Пара кодируется в base64 при конвертации, поэтому отдельного вызова авторизации в коде нет.
Формат Windows cmd
curl ^"https://example.com^" -H ^"Accept: */*^"
Copy as cURL (cmd) экранирует кареткой и удваивает кавычки. Вставляй как есть, чистить руками не нужно.

Когда использовать

У тебя есть рабочий запрос — из DevTools, Postman или документации API — и нужен код. Переписывать руками URL, метод, пятнадцать заголовков и JSON-тело долго, и рано или поздно ошибёшься в символе. Со вставленной командой этого не случается. В скрапинге с этого обычно всё и начинается. Находишь во вкладке Network запрос, который отдаёт данные, копируешь как cURL, конвертируешь в Python или Node — и скрипт стартует ровно с тех заголовков и кук, которых ждёт сервер, а не с догадок о них. Когда ответ приходит не тот, Отправка запросов отправит тот же запрос через прокси и покажет сырой ответ, а Проверка прокси скажет, не сам ли прокси виноват. Всё считается локально. Здесь это важнее, чем на других инструментах: в скопированном запросе почти всегда лежит живая сессионная кука или access-токен, и они остаются во вкладке браузера.

Частые вопросы

Как сконвертировать cURL в Python?
Вставь команду и выбери Python. Получишь скрипт на requests: url, словарь headers, тело (если оно есть) и подходящий вызов requests.get или requests.post. Запускается сразу, подставлять ничего не нужно.
Можно ли сконвертировать cURL в Node.js?
Да. Выбери JavaScript, дальше в списке «Клиент» — fetch или axios. fetch не тянет зависимостей на Node 18 и выше и работает в браузере; axios пригодится, если он в проекте уже есть. Заголовки и тело попадают в код в обоих случаях.
Какой Java HTTP-клиент поддерживается?
Три, и выбираешь ты: java.net.http.HttpClient — встроен в Java 11+, без зависимостей; OkHttp; Apache HttpClient 5. На выходе целый класс Main, он компилируется и запускается сам по себе.
А PHP, Go, Ruby и C#?
Все четыре на месте. PHP отдаёт код на ext-curl (curl_init / curl_setopt), Go и Ruby — на штатном net/http, C# — на HttpClient. У каждого из них один ходовой клиент, поэтому список «Клиент» для них не показывается.
Что такое «Copy as cURL (bash)» и чем он отличается от cmd?
Это один и тот же запрос, записанный для двух разных оболочек. Вариант bash берёт значения в одинарные кавычки и переносит строки обратным слэшем. Вариант cmd, который Chrome предлагает под Windows, вместо этого экранирует кареткой (^) и удваивает кавычки — cmd.exe читает одинарную кавычку как обычный символ. Вставляй любой: разбор понимает оба, и помнить, что именно ты скопировал, не нужно.
Как прочитать чужую cURL-команду, не запуская её?
Вставь её и смотри не на команду, а на сгенерированный код. Длинную строку cURL читать тяжело: URL, два десятка заголовков и тело идут сплошняком. Код разносит их по местам: метод отдельно, заголовки списком, тело отдельной строкой. Что запрос делает, видно до того, как ты его отправишь. Сама конвертация никуда ничего не отправляет.
Что происходит с --data-raw, -F и --compressed?
--data-raw, --data, --data-binary и --data-urlencode становятся телом запроса. Multipart (-F) упрощается, и инструмент об этом предупреждает — сверь полученное тело перед использованием. Флаги, которые управляют только поведением самой утилиты cURL, — --compressed, -L, -k, -s, -v — принимаются, но в код не переносятся: HTTP-библиотеки разбираются с редиректами и сжатием по-своему. Флаг -x / --proxy тоже отбрасывается: прокси выбирается в Отправке запросов, там это настоящая настройка.
Конвертация идёт на сервере?
Нет, разбор и генерация целиком во вкладке браузера. В команде, скопированной из DevTools, обычно лежит сессионная кука или bearer-токен — ни то, ни другое никуда не уходит.
cURL-команда работает, а сконвертированный код получает 403. Почему?
Почти всегда с запросом всё в порядке, а не в порядке то, что вокруг. Куки, скопированные час назад, могли протухнуть. Часть защит смотрит и ниже HTTP, на TLS-рукопожатие: у клиента на Python или Java отпечаток не такой, как у Chrome, поэтому те же самые заголовки читаются как другой клиент. Сравни ответы через Отправку запросов, а если трафик идёт через прокси — проверь его в Проверке прокси.

Похожие инструменты