Parser de cURL
Roda no seu navegador; nada é enviado
Leia um comando cURL como a requisição que ele envia e transforme em fetch, Python requests ou um bash organizado. Nada é enviado.
Command
No command yet
O que é um comando cURL?
cURL é um programa de linha de comando para enviar requisições HTTP, e um comando cURL é a forma mais comum de desenvolvedores compartilharem uma requisição. Uma linha só guarda tudo o que o servidor recebe: o método depois de -X, a URL, cada header depois de -H e o body depois de -d.
Você encontra comandos cURL em todo lugar no trabalho com APIs. A documentação de APIs mostra exemplos em cURL, as ferramentas de desenvolvedor do navegador oferecem Copy as cURL em qualquer requisição de rede, e relatórios de bug muitas vezes trazem um para o problema poder ser repetido exatamente.
O curl adiciona partes da requisição que o comando não escreve, e são justamente essas que pegam as pessoas de surpresa. -d transforma um GET em POST e envia Content-Type: application/x-www-form-urlencoded, então um body JSON sem Content-Type JSON chega ao servidor como formulário. Várias opções -d são unidas com &. -G passa os dados para a query string, e -u user:password vira um header Authorization do tipo Basic. O parser mostra esses headers e marca qual opção os adicionou.
Como usar esta ferramenta
- 1Cole um comando no painel Command ou escolha um em Examples. Comandos copiados do Chrome ou do Firefox funcionam como estão, inclusive o Copy as cURL (cmd) do Windows com os escapes
^, e comandos do PowerShell com continuação de linha por crase. - 2Veja a requisição na aba Request: o método e por que o curl o usa, a URL separada em partes, os parâmetros de query, os headers, o body (JSON é formatado sem mudar nenhum valor) e as opções que o parser lista mas não interpreta.
- 3As notas no topo da aba Request apontam coisas que vale saber, como um body JSON enviado como formulário. Show, ou F8, coloca o cursor na opção em questão.
- 4Abra a aba Code para ter a mesma requisição em JavaScript fetch, Python requests ou um comando bash organizado em várias linhas, e copie.
- 5Tidy (Shift+Alt+F) reescreve o comando no editor como bash, uma opção por linha. Ctrl+Z desfaz.
Solução de problemas
- Aspas simples não fechadas, ou aspas duplas não fechadas
- Uma aspa abre e nunca fecha, então o resto do comando é lido como um único argumento. No bash, uma aspa simples não pode aparecer dentro de '…'; escreva
'\''ou use$'…'. O editor marca onde a aspa abre. - Nenhuma URL encontrada
- Todos os argumentos foram lidos como opções ou valores de opções. Confira se a URL está lá e não dentro de uma aspa não fechada, e se uma opção como
-oou-utem o próprio valor antes da URL. - O body parece JSON, mas é enviado como formulário
-dsem Content-Type faz o curl enviarapplication/x-www-form-urlencoded. Adicione-H "Content-Type: application/json", ou use--json, que define Content-Type e Accept.- A URL tem [ ] ou { }
- O curl trata isso como um padrão e envia várias requisições, uma para cada valor. Adicione
-g(--globoff) para enviar como está escrito. - Este é um comando wget, não curl
- O parser só lê curl. Um comando copiado como PowerShell no navegador usa
Invoke-WebRequest; escolha Copy as cURL no lugar.
Perguntas frequentes
Meu comando é enviado para algum lugar?
Não. O comando é lido no seu navegador e nenhuma requisição é feita. Isso importa porque comandos copiados costumam ter tokens e cookies reais. O comando fica no session storage desta aba até você limpar ou fechar a aba; Copy link coloca o comando no link depois do # (nunca enviado a um servidor), então confira se há credenciais antes de compartilhar.
Quais opções do cURL o parser entende?
As que mudam a requisição: -X, -H, -d e suas variantes (--data-raw, --data-binary, --data-urlencode), --json, -F, -G, -I, -T, -u, -b, -A, -e, --oauth2-bearer, -L, -k, -m e --compressed. Opções curtas podem ser combinadas, como em -sSL, ou ter o valor colado, como em -XPOST. Outras opções são listadas com o que fazem, e as desconhecidas também aparecem em vez de serem descartadas.
Por que aparece POST se meu comando não tem -X?
O curl envia um POST sempre que o comando tem body (-d, --json ou -F) e nenhum método explícito, e o parser segue a mesma regra. -G envia os dados como query string com GET, e -I envia HEAD.
Ele lê arquivos referenciados com @, como -d @body.json?
Não. O parser roda no navegador e não consegue ler arquivos do seu computador, então mostra o nome do arquivo e uma nota. Cole o conteúdo do arquivo com --data-raw para ver o body.
Quão exato é o código gerado?
O método, a URL, os headers e o body são os mesmos, e o body é enviado como a mesma string, sem ser recodificado. Algumas opções do curl não têm equivalente: o fetch não consegue pular a verificação de certificado como o -k, e os navegadores não deixam o fetch definir um header Cookie. O código gerado avisa isso num comentário onde importa. O código Python passa allow_redirects=False, a menos que o comando tenha -L, porque o curl não segue redirecionamentos por padrão.