Ferramentas
Guias

Conversor de curl

Dev

Converta um comando curl em fetch, axios, Python, Go, Java e HTTPie — ao vivo, com abas multilíngues.

100% no cliente Sem backend

URLs remotas não são buscadas; cole seu JSON diretamente.

Entrada
Cole um comando curl para ver o código convertido.
Nesta página

O que é um conversor de curl?#

curl é a coisa mais próxima que o HTTP tem de uma linguagem universal. Todos os painéis DevTools do navegador, todos os sites de documentação de API e todos os bilhetes de suporte acabam por lhe entregar um comando curl — “copiar como cURL” é como um pedido viaja de um navegador para um bug report. O problema é que um comando curl colado raramente é o que se pode efetivamente correr no seu código. O seu serviço está escrito em Python, ou Go, ou fetch do lado do navegador; não se quer invocar curl pela shell, quer-se a chamada equivalente no cliente HTTP que já usa.

Esta página faz a ponte. Cole um comando curl à esquerda e ele analisa a sintaxe shell — flags, aspas, continuação de linha, cabeçalhos, body, auth — num pedido estruturado, depois emite o código equivalente para seis alvos de uma só vez: fetch do navegador, axios, requests de Python, net/http de Go, HttpURLConnection de Java e httpie. Lê-se ao longo das abas, copia-se a que corresponde à sua stack, e segue-se.

A análise corre inteiramente no seu navegador. O comando que cola nunca toca um servidor, o que importa porque comandos curl reais frequentemente contêm bearer tokens, credenciais de basic-auth, ou cookies assinados.

Como usar#

  1. Cole o seu comando curl no painel de Entrada à esquerda. Pode colar a palavra inicial curl ou omiti-la; ambos funcionam. Comandos multilinha unidos com \ final são compreendidos, tal como comandos copiados diretamente de um terminal onde cada flag fica na sua própria linha.
  2. Clique em Exemplo para carregar um exemplo realista se quiser ver a forma primeiro, ou Limpar para limpar o painel.
  3. Escolha uma linguagem de destino na barra de abas por cima da saída: fetch, axios, python, go, java ou httpie. Todos os seis são gerados a partir da mesma análise, pelo que mudar de aba é instantâneo — não há re-execução.
  4. Leia o código gerado no painel. Use Copiar na barra de abas para o recolher.
  5. Veja a barra de estado por baixo dos painéis. Se o analisador bateu numa flag que não modela (um redirecionamento de output-file, uma definição de proxy), diz-o explicitamente em vez de a largar silenciosamente.

Principais recursos#

  • Um verdadeiro tokenizer shell, não regex raspado. Aspas simples, aspas duplas, quoting ANSI-C $'...' (com escapes \n, \t, \x41, é), continuação de linha com barra invertida-newline, e a diferença entre "a\b" e 'a\b' são todos tratados como o bash faria. Conversores ingénuos que partem em espaços partem-se o momento em que um valor de cabeçalho contém um espaço.
  • Seis alvos de uma análise. Vê fetch, axios, Python, Go, Java e httpie lado a lado. Se está inseguro se deve ir buscar fetch ou axios, pode comparar o tratamento do mesmo cabeçalho de auth em dois cliques.
  • Inteligência de body. Quando o pedido transporta Content-Type: application/json, o emissor Python passa-o como a keyword json= para que um body em forma de dict seja enviado corretamente; caso contrário recua para data=.
  • Basic auth decodificado uma vez. Uma flag -u user:pass torna-se btoa("user:pass") em fetch, o bloco auth em axios, o tuplo auth= em requests, e SetBasicAuth em Go — cada idiomática como essa linguagem espera.
  • Flags desconhecidas são reportadas, não engolidas. -o output.txt ou --proxy aparecem na barra de estado como unknown args, para que nunca seja silenciosamente induzido em erro a pensar que uma conversão capturou um redirecionamento ou proxy que afinal largou.
  • Sem backend, sem fuga. O comando é tokenizado em memória pelo próprio script da página. Não há chamada de rede que leve o seu token colado para lado nenhum.

Exemplo detalhado#

Carregue em Exemplo (ou cole o equivalente ao que os DevTools do navegador produzem quando se faz “Copy as cURL” para um POST JSON):

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

Mude para a aba fetch e obtém:

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\"}",
});

Mude para a aba python. Como Content-Type é JSON, o body passa pela keyword 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)

O mesmo comando está também imediatamente disponível sob as abas go, java, axios e httpie — seis conversões pelo preço de uma colagem.

Perguntas frequentes#

Diz “unknown args” para o meu comando. O que é que saltou?#

O analisador modela as flags curl que se usam para descrever um pedido — método, URL, cabeçalhos, body, basic auth, --compressed, -k, -L. Flags que descrevem o próprio comportamento do curl (como -o para escrever o body num arquivo, --proxy, --connect-timeout, --cert) não são traduzidas, porque não têm equivalente numa chamada fetch. São recolhidas e mostradas na barra de estado para que se saiba que foram largadas deliberadamente, não perdidas.

Posso converter um comando que usa quoting ANSI-C $'...'?#

Sim. Cabeçalhos e bodies copiados de terminais chegam às vezes envolvidos em $'...' para que sequências de escape como \n ou \t sejam interpretadas pela shell. O tokenizer percebe quoting ANSI-C e decodifica \n, \t, \xHH, \uHHHH, \UHHHHHHHH e os escapes simples, pelo que os bytes que o conversor vê correspondem aos bytes que o curl teria enviado.

Porque é que o meu output Python usa json= às vezes e data= outras?#

O emissor olha para os seus cabeçalhos. Quando Content-Type: application/json está presente passa o body pela keyword json=, o que deixa o requests definir o cabeçalho e codificar o payload corretamente. Para qualquer outro content type (form-encoded, texto simples, multipart) recua para data=, porque forçar json= aí estaria errado.

Envia o pedido por mim?#

Não, e isso é deliberado. Esta ferramenta apenas traduz o comando em código; nunca o executa. O excerto gerado corre no seu próprio programa, sob as suas próprias credenciais, onde o pode inspecionar antes de fazer alguma coisa ao vivo.