Conversor de curl para código — Python, JavaScript, Go, PHP e mais
Cole um comando curl, inclusive o “Copy as cURL” do Chrome, e receba a mesma requisição em Python, JavaScript, Node, Go, PHP, Ruby, Java, C#, wget ou HTTPie.
import requests headers = { 'Authorization': 'Bearer YOUR_API_TOKEN', 'Content-Type': 'application/json', } json_data = { 'customer_id': 'cus_123', 'items': [ { 'sku': 'TSHIRT-M', 'qty': 2, }, ], 'note': 'Leave at the door', } response = requests.post('https://api.example.com/v1/orders', headers=headers, json=json_data) print(response.status_code) print(response.text)
Roda inteiramente no seu navegador. O comando só é analisado, nunca executado nem enviado a lugar nenhum, então tokens e cookies nele ficam na sua máquina. Ver todas as ferramentas grátis.
Encontrou um problema ou algo que poderia ser melhor? Lemos todas as mensagens e corrigimos rápido.
Este conversor de curl para código grátis pega um comando curl e escreve a mesma requisição HTTP em Python (requests), JavaScript (fetch ou Axios), Node.js, Go, PHP, Ruby, Java, C#, wget ou HTTPie. O fluxo de sempre: encontre uma requisição no DevTools do navegador, escolha Copy as cURL, cole aqui e receba código funcionando sem redigitar cabeçalhos nem escapar um corpo JSON à mão.
O parser segue as regras do próprio curl: opções curtas podem ser combinadas (-sSL) ou coladas (-XPOST), a URL pode aparecer em qualquer lugar, -d implica POST com tipo de conteúdo de formulário, -G move os dados para a query string e --data-urlencode codifica do mesmo jeito que o curl. Ele entende as aspas do bash, inclusive as strings $'…' que o Chrome gera, e as aspas do cmd do Windows com escapes ^. Tudo o que uma linguagem de destino não consegue expressar, como pular a verificação de TLS num navegador, é indicado num comentário em vez de ser descartado em silêncio.
Como usar
- No DevTools do Chrome ou do Edge, abra a aba Network, clique com o botão direito numa requisição e escolha Copy → Copy as cURL (bash ou cmd). No Firefox, escolha Copy Value → Copy as cURL. Ou escreva o seu próprio comando curl.
- Cole-o na caixa. O método, a URL, o número de cabeçalhos e o tipo de corpo aparecem acima da saída, para você conferir se foi lido corretamente.
- Escolha a linguagem de destino. O código se atualiza na hora.
- Leia as observações que aparecerem na caixa amarela: elas listam opções que foram ignoradas ou que precisam de atenção.
- Copie o código ou baixe-o. Substitua tokens e cookies antes de fazer commit em qualquer lugar.
Perguntas frequentes
Como copio uma requisição como cURL no Chrome?
Abra o DevTools (F12 ou Cmd+Option+I), vá para a aba Network e recarregue a página se a lista estiver vazia. Clique com o botão direito na requisição desejada, escolha Copy e depois Copy as cURL (bash) no macOS e Linux ou Copy as cURL (cmd) no Windows. Os dois formatos funcionam aqui. O comando copiado inclui seus cookies e cabeçalhos de autorização, então trate-o como uma senha.
Por que alguns cabeçalhos não aparecem no código fetch para navegador?
Os navegadores não deixam o JavaScript definir certos cabeçalhos de requisição: Cookie, Host, Origin, Referer, User-Agent na prática, Content-Length, Accept-Encoding, Connection e qualquer um que comece com Sec- ou Proxy-. No padrão Fetch, eles se chamam forbidden request headers, e o próprio navegador os preenche. A saída fetch para navegador os omite e avisa num comentário; a saída fetch para Node.js os mantém, porque o Node não tem essa restrição.
Qual é a diferença entre -d, --data-raw e --data-binary?
-d (--data) envia o texto como corpo, mas um valor que começa com @ é lido de um arquivo, com retornos de carro e quebras de linha removidos. --data-raw é igual, só que sem o comportamento de arquivo com @, e é por isso que os navegadores o usam. --data-binary também lê arquivos com @, mas mantém os bytes exatamente. Os três definem Content-Type: application/x-www-form-urlencoded, a não ser que você passe o seu próprio cabeçalho, e várias opções -d são unidas com &.
O curl segue redirecionamentos?
Não por padrão; ele retorna a resposta 3xx, a não ser que você adicione -L (--location). A maioria das bibliotecas HTTP faz o contrário: fetch, Python requests, Go net/http, Axios no Node e o HttpClient do .NET seguem redirecionamentos automaticamente. Java HttpClient, PHP cURL e Ruby Net::HTTP não seguem, então, quando o seu comando tem -L, o código gerado ativa o seguimento para eles (o Ruby recebe uma observação, porque o Net::HTTP não tem uma opção para isso).
O que o --compressed faz, e preciso dele no código?
Ele faz o curl enviar um cabeçalho Accept-Encoding (gzip, deflate, br e zstd, dependendo de como o curl foi compilado) e descompactar a resposta. Navegadores, Python requests, Go e o fetch do Node já pedem e decodificam respostas comprimidas sem precisar de instrução. O código gerado só o adiciona onde a biblioteca precisa que ele seja ativado: CURLOPT_ENCODING no PHP, AutomaticDecompression no C#, --compression=auto no wget.
Meu comando curl é enviado para algum lugar?
Não. O comando é analisado e convertido por JavaScript nesta página. Ele nunca é executado nem enviado a um servidor, então os tokens e cookies de sessão de uma requisição copiada do DevTools ficam na sua máquina.
Opções do curl e no que elas se transformam
• -X / --request define o método. Sem ele, o método é GET; POST quando há -d, --json ou -F; HEAD com -I; e PUT com -T.
• -H / --header adiciona um cabeçalho. "Name:" sem nada depois remove um cabeçalho, e "Name;" envia um vazio.
• --json body envia JSON e define Content-Type e Accept como application/json (curl 7.82 e posteriores).
• -F name=value e -F file=@photo.jpg;type=image/jpeg montam um corpo multipart/form-data; o código usa FormData, files=, CURLFile ou MultipartFormDataContent, conforme o caso.
• -u user:password vira autenticação Basic; -b "a=1; b=2" vira um cabeçalho Cookie (ou um dict de cookies em Python).
• -A e -e definem User-Agent e Referer. -k / --insecure desativa a verificação de certificados; isso aparece com um aviso sempre que possível, porque nunca deveria chegar à produção.
• -G / --get acrescenta todos os valores de -d e --data-urlencode à URL como query string e envia um GET.
• -s, -S, -v, -i, -o e as opções de progresso só afetam como o curl exibe a saída, então não têm equivalente em código e são ignoradas.
Aspas no bash e no Windows, em resumo
No bash, texto entre 'aspas simples' é literal; "aspas duplas" permitem os escapes \" e \$; strings $'…' entendem os escapes \n, \t, \' e \xHH. Uma barra invertida no fim da linha continua o comando na linha seguinte. O Chrome usa $'…' sempre que um cabeçalho ou corpo contém uma aspa simples ou um caractere não ASCII.
No cmd do Windows, ^ é o caractere de escape e também continua a linha. O “Copy as cURL (cmd)” do Chrome envolve cada valor em ^"…^" e escapa caracteres como &, %, { e } com ^. O PowerShell é diferente de novo: no Windows PowerShell 5, curl é um alias de Invoke-WebRequest, então rode curl.exe explicitamente nele. Este conversor lê as formas bash e cmd; sintaxe específica do PowerShell, como continuações com crase, não é aceita.
Ferramentas grátis relacionadas
- JSON para TypeScript — Cole um exemplo de JSON e receba interfaces TypeScript, um schema Zod, JSON Schema ou tipos para Go, Python, Java, C#, Kotlin, Swift e Rust.
- Formatador de JSON — Formate, minifique e valide JSON, com erros de parsing localizados por linha e coluna. No seu navegador, sem upload.
- Decodificador JWT — Decodifique o header e o payload de um JWT, leia a expiração em linguagem simples, verifique assinaturas HS, RS, PS e ES ou assine um novo token. Nada sai do seu navegador.
- Codificador / decodificador Base64 — Codifique texto ou arquivos em Base64, transforme imagens em data URIs com trechos de CSS e <img>, e decodifique Base64 de volta em um arquivo com pré-visualização. Nada sai do seu navegador.
- Decodificador de certificado SSL — Cole um certificado PEM, uma cadeia ou um CSR, ou envie um arquivo .crt, para ver SANs, expiração, emissor, tipo de chave e fingerprints. Decodificado no seu navegador.