Pack Camo

Conversor de cURL para código

Transforme um comando curl em fetch, axios, Python requests, Go, PHP e mais.

Tudo roda localmente — nada é enviado para servidor nenhum.

Comando curl

POST api.example.com

fetch

23 linhas

// 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());

Cole um comando curl e receba código que funciona

Este conversor transforma um comando curl na mesma requisição HTTP em JavaScript fetch, axios, Node.js, Python requests, Go net/http, extensão curl do PHP ou Rust reqwest. Ele lê o curl do mesmo jeito que o seu shell e o próprio curl: aspas simples e duplas, strings $'…', continuações de linha, flags combinadas como -sSL, dados -d repetidos e campos multipart -F. Headers, cookies, autenticação basic e bearer, corpos JSON, timeouts e configurações de TLS são levados junto, e tudo o que não pode ser traduzido é apontado. O comando é analisado no seu navegador e nunca é enviado a lugar nenhum, então os tokens e cookies nele continuam privados.

Como converter um comando curl em código

  1. 1Copie uma requisição como curl. No Chrome, Edge ou Firefox, abra as ferramentas de desenvolvedor, vá até a aba Network, clique com o botão direito em uma requisição e escolha Copy › Copy as cURL. Tanto a variante bash quanto a cmd do Windows funcionam.
  2. 2Cole o comando no painel da esquerda. Comandos de várias linhas com continuações \ ou ^ não são problema.
  3. 3Escolha a linguagem de destino: fetch, axios, Node.js, Python, Go, PHP ou Rust, ou JSON para ver a requisição analisada.
  4. 4Leia as notas abaixo do código sobre flags ignoradas ou que precisam de atenção, depois copie o código ou baixe-o como arquivo.

O que é convertido

Método e URL
-X/--request, --url, -G/--get (os dados vão para a query string), -I/--head, -T/--upload-file (PUT). Sem -X, o método é escolhido como o curl escolhe: POST quando há corpo, GET caso contrário.
Headers
-H/--header, -A/--user-agent, -e/--referer, -b/--cookie e -r/--range. Headers repetidos são combinados.
Corpos
-d/--data, --data-raw, --data-binary e --data-urlencode (unidos com &, como o curl faz), --json e campos multipart -F/--form, incluindo uploads de arquivo com ;type= e ;filename=.
Autenticação
-u/--user para basic auth, --digest, --oauth2-bearer e credenciais escritas na URL.
Opções de conexão
-k/--insecure, -L/--location, --compressed, -m/--max-time e -x/--proxy, quando a linguagem de destino tem um equivalente.

Corpos JSON viram objetos de verdade

Quando o corpo é JSON, seja porque o Content-Type diz isso ou porque claramente é, ele é formatado e, quando a linguagem permite, escrito como valor nativo: um objeto passado para JSON.stringify no fetch, um objeto simples no axios e um dicionário passado como json= no Python requests, com true, false e null transformados em True, False e None. Isso é muito mais fácil de editar do que uma string escapada. Desative Formatar corpos JSON para manter o corpo byte a byte como estava.

fetch no navegador versus Node.js

Os dois destinos fetch são diferentes porque os navegadores restringem o que uma página pode enviar. Um script no navegador não pode definir Cookie, Referer, Host, Accept-Encoding nem qualquer header Sec-, não pode pular a verificação de certificados e não pode ler arquivos a partir de um caminho. O destino de navegador informa quais headers serão descartados. O destino Node.js pode fazer tudo isso: arquivos são lidos com openAsBlob e readFile, e --insecure ou um proxy viram um dispatcher do undici.

Para saber o que significa o status da resposta depois que a requisição rodar, veja a referência de códigos de status HTTP. Valores de query que precisam de escape podem ser codificados com o codificador de URL.

Regras de aspas, resolvidas

A maioria dos erros de conversão vem das aspas. Em um shell POSIX, aspas simples mantêm tudo literalmente, aspas duplas ainda processam \" e \$, e $'…' entende escapes como \n e \x41. Uma barra invertida no fim da linha continua o comando. Já o cmd do Windows usa ^ para escapes e continuações, que é o que o "Copy as cURL (cmd)" gera. O tokenizador segue cada uma dessas regras, então o corpo que o seu código envia é exatamente o corpo que o curl teria enviado.

Tudo o que vem depois de um pipe, ponto e vírgula ou redirecionamento, como | jq ., pertence ao shell e não ao curl, e é ignorado com uma nota.

Perguntas frequentes

Meu comando curl é enviado para um servidor?
Não. O comando é analisado e o código é gerado no seu navegador. Tokens, cookies e senhas nele nunca saem do seu dispositivo.
Como copio uma requisição como curl no navegador?
Abra as ferramentas de desenvolvedor (F12), selecione a aba Network, clique com o botão direito na requisição e escolha Copy e depois Copy as cURL. No Windows, tanto a versão bash quanto a cmd podem ser coladas aqui.
Quais opções do curl são suportadas?
As opções que definem uma requisição: método, URL, headers, cookies, todas as variantes de -d, --json, formulários -F, autenticação -u, -G, -I, -T, -L, -k, --compressed, --max-time e --proxy. Opções de saída como -s, -o e -v não afetam a requisição e são ignoradas.
Por que o código fetch para navegador deixa alguns headers de fora?
Os navegadores proíbem scripts de definir headers como Cookie, Referer, Host e Accept-Encoding, e o fetch os descarta silenciosamente. Use o destino Node.js se precisar enviá-los.
Como os uploads de arquivo são convertidos?
Um campo -F como file=@photo.jpg vira um campo de arquivo multipart que lê photo.jpg do disco em Node.js, Python, Go, PHP e Rust. No fetch para navegador, ele usa um arquivo escolhido com um <input type="file">, porque páginas não podem ler arquivos pelo caminho.
O que o --data-urlencode faz?
Ele aplica percent-encoding ao valor antes de enviá-lo, então name=a b&c é enviado como name=a%20b%26c. O conversor aplica a mesma codificação, então o código gerado envia os mesmos bytes.
O curl segue redirecionamentos?
Só se você passar -L. A maioria das bibliotecas HTTP segue redirecionamentos por padrão, então o código gerado costuma segui-los de qualquer forma; a extensão curl do PHP só segue quando -L é informado.