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
- 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
cmddo Windows funcionam. - 2Cole o comando no painel da esquerda. Comandos de várias linhas com continuações
\ou^não são problema. - 3Escolha a linguagem de destino: fetch, axios, Node.js, Python, Go, PHP ou Rust, ou JSON para ver a requisição analisada.
- 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.