Gerador e conversor de comandos curl

Monte comandos curl e converta-os para fetch, Python e HTTPie.

Sobre esta ferramenta

Preencha o método, a URL, os cabeçalhos, o corpo e a autenticação para obter um comando curl pronto para rodar, ou cole um comando curl existente para editá-lo. Cada requisição também é mostrada como fetch do JavaScript, Python requests e HTTPie. Nada é enviado: a ferramenta só escreve os comandos.

Como usar

  1. Cole um comando curl existente para importá-lo, por exemplo das ferramentas de desenvolvedor do seu navegador (Copy as cURL).
  2. Ou defina o método e a URL e depois adicione cabeçalhos, autenticação e um corpo JSON, de formulário ou bruto.
  3. Escolha opções como seguir redirecionamentos ou mostrar os cabeçalhos da resposta.
  4. Copie o resultado como curl, fetch do JavaScript, Python requests ou HTTPie.

Perguntas

Como envio JSON com curl?
Use -H 'Content-Type: application/json' junto com --data-raw '{"key":"value"}'. Versões mais novas do curl também têm --json, que define os cabeçalhos Content-Type e Accept para você. Escolha JSON como tipo de corpo aqui e as flags certas são adicionadas.
Esta ferramenta envia minha requisição?
Não. Ela só escreve código. Nada sai do seu navegador, então é seguro colar comandos que contêm tokens, mas é uma boa prática substituir segredos reais por marcadores antes de compartilhar um comando.
Qual é a diferença entre -d e --data-raw?
Com -d, um valor que começa com @ é lido de um arquivo. --data-raw envia o texto exatamente como escrito, o que é mais seguro para JSON e para valores que podem começar com @.
Por que o curl não segue redirecionamentos?
Por padrão, o curl mostra a própria resposta de redirecionamento. Adicione -L (Seguir redirecionamentos) para ir ao novo endereço. O fetch e a maioria das bibliotecas seguem redirecionamentos automaticamente.
Quais opções do curl podem ser importadas?
Método, URL, cabeçalhos, as opções de dados, --json, -u, user agent, cookies, referer, -G, -L, -i, -s, -k, -v, --head e --compressed. Campos multipart -F e outras opções raras são ignorados com um aviso.
Como enviar dados de formulário com curl?
curl -d "name=Ada&role=admin" URL envia um formulário URL-encoded e muda o método para POST sozinho. Use --data-urlencode "q=hello world" quando um valor tiver espaços ou símbolos. Uploads de arquivo precisam de multipart -F "file=@photo.jpg", que esta ferramenta ignora ao importar, então adicione à mão.
Como adicionar parâmetros de query a uma requisição GET com curl?
Coloque-os na URL e envolva a URL inteira em aspas duplas, porque & e ? têm significado para o shell. Ou mantenha-os separados com -G --data-urlencode "q=red shoes", que acrescenta os valores codificados à URL em vez de enviar um corpo. A importação daqui entende o -G e move os valores para a URL.
Como ver os cabeçalhos da resposta com curl?
-i imprime a linha de status e os cabeçalhos antes do corpo. -I (--head) envia uma requisição HEAD e mostra só os cabeçalhos, mas alguns servidores respondem ao HEAD de forma diferente do GET. -v mostra também os cabeçalhos da requisição, além do handshake TLS, o que ajuda a depurar redirecionamentos, autenticação ou erros de certificado.

Como converter curl para Python requests

Cole o comando curl na caixa de importação e escolha Python. Os cabeçalhos viram um dict, um corpo JSON vira json=payload, para que o requests o serialize e defina o Content-Type, e corpos de formulário ou brutos viram data=payload. A autenticação Basic do -u vira auth=(user, password), e o -k vira verify=False. Um token Bearer fica nos cabeçalhos como uma entrada Authorization.

Duas linhas podem surpreender. O requests segue redirecionamentos por padrão e o curl não, então o código adiciona allow_redirects=False, a menos que o comando curl tenha -L. O requests também não tem timeout padrão e pode esperar para sempre por um servidor travado, então timeout=30 é adicionado. Mantenha ou mude o número. A mesma requisição também está disponível como JavaScript fetch e HTTPie com um clique.

Por que uma requisição funciona no curl, mas não no fetch?

A causa habitual é o CORS. O curl envia a requisição e imprime o que voltar, mas um navegador só deixa sua página ler uma resposta cross-origin quando o servidor permite isso com Access-Control-Allow-Origin. Os navegadores também se recusam a definir alguns cabeçalhos pelo código, como Cookie e Host. O mesmo código fetch rodando no Node não tem verificações de CORS, então se comporta como o curl.

Para ter um ponto de partida que funcione, abra a aba Network nas ferramentas de desenvolvedor do navegador, clique com o botão direito na requisição e escolha Copy as cURL. No Windows, escolha a variante bash, porque a variante cmd usa outro estilo de escape. O comando copiado traz muitos cabeçalhos do navegador de que você raramente precisa, como sec-ch-ua e cookies longos, então apague-os na lista de cabeçalhos antes de converter.

HTTPie ou curl: sintaxe comparada

O curl vem instalado em quase todo lugar, incluindo o macOS e o Windows 10 em diante. O HTTPie (o comando http) tem uma sintaxe mais curta e colore a saída. Os cabeçalhos são escritos como Name:value sem -H, os campos de formulário como name=value com --form, --follow substitui -L e --verify=no substitui -k. O comando HTTPie gerado passa corpos JSON por uma here-string, que funciona no bash e no zsh, mas não no PowerShell.

Para autenticação Basic, curl -u user:password e HTTPie -a user:password montam o cabeçalho Authorization para você. As credenciais só são codificadas em Base64, não criptografadas, o que a ferramenta de Base64 pode mostrar, então sempre as envie por HTTPS. Para tokens, o curl usa -H "Authorization: Bearer TOKEN" e o HTTPie usa -A bearer -a TOKEN. Quando você importa um comando curl, um cabeçalho Bearer vai automaticamente para os campos de Autenticação.

Algo não está funcionando ou um resultado parece errado? Relatar um problema com esta ferramenta