Cheatsheet cURL
Ferramenta para transferência de dados
cURL
Pedidos Básicos
GET simples
curl https://api.exemplo.com
# Guardar resposta em ficheiro
curl https://site.com -o pagina.html
# Seguir redirecionamentos
curl -L http://site.com
Pedido GET básico.
Timeout e retry
# Timeout de ligação (5s)
curl --connect-timeout 5 url
# Timeout total (30s)
curl --max-time 30 url
# Repetir em falha
curl --retry 3 --retry-delay 2 url
Controlo de tempo.
Ver só headers
# Apenas cabeçalhos
curl -I https://site.com
# Headers + corpo
curl -i https://site.com
# Só o código de status
curl -o /dev/null -s -w "%{http_code}" url
Inspecionar resposta.
Modo silencioso
# Sem barra de progresso
curl -s https://api.com
# Silencioso mas mostra erros
curl -sS https://api.com
# Mostrar erros detalhados
curl -sS --show-error url
Controlar output.
Parâmetros de query
# Na URL diretamente
curl "https://api.com/busca?q=node&p=2"
# Com --data-urlencode
curl -G https://api.com/busca
--data-urlencode "q=olá mundo"
--data-urlencode "p=2"
Query strings (GET).
Métodos HTTP
POST
curl -X POST https://api.com/users
# Com dados de formulário
curl -X POST https://api.com/users
-d "nome=Ana&email=ana@mail.com"
Enviar pedido POST.
PUT e PATCH
# PUT (substituir)
curl -X PUT https://api.com/users/1
-d "nome=Ana Silva"
# PATCH (atualizar parcial)
curl -X PATCH https://api.com/users/1
-d "email=novo@mail.com"
Atualizar recursos.
DELETE
curl -X DELETE https://api.com/users/1
# Com autenticação
curl -X DELETE https://api.com/users/1
-H "Authorization: Bearer TOKEN"
Eliminar recursos.
Definir método qualquer
# Método personalizado
curl -X OPTIONS https://api.com
# HEAD
curl -I https://api.com
# Qualquer verbo
curl -X CUSTOM https://api.com
Opção -X / --request.
Headers e Autenticação
Enviar headers
curl https://api.com
-H "Content-Type: application/json"
-H "Accept: application/json"
-H "X-API-Key: abc123"
# Remover header
curl url -H "User-Agent:"
Opção -H / --header.
Basic Auth
# user:password
curl -u usuario:senha https://api.com
# Só utilizador (pede senha)
curl -u usuario https://api.com
Autenticação básica.
Bearer Token
curl https://api.com/privado
-H "Authorization: Bearer SEU_TOKEN"
Autenticação por token (JWT/OAuth).
User-Agent e Referer
# User-Agent personalizado
curl url -A "MeuApp/1.0"
# Referer
curl url -e "https://origem.com"
# Cookies via header
curl url -H "Cookie: id=123"
Identificação do cliente.
Enviar Dados
JSON no corpo
curl -X POST https://api.com/users
-H "Content-Type: application/json"
-d '{
"nome": "Ana",
"email": "ana@mail.com"
}'
Enviar payload JSON.
JSON de ficheiro
# Ler corpo de ficheiro
curl -X POST https://api.com/users
-H "Content-Type: application/json"
-d @dados.json
Usar ficheiro como corpo.
Formulário (form-data)
# multipart/form-data
curl -X POST https://api.com/upload
-F "nome=Ana"
-F "foto=@foto.jpg"
Dados de formulário.
URL-encoded
# application/x-www-form-urlencoded
curl -X POST https://api.com/login
--data-urlencode "user=ana"
--data-urlencode "pass=a b c"
# -d codifica automaticamente
Dados codificados.
Download e Upload
Download de ficheiro
# Nome original (-O maiúsculo)
curl -O https://site.com/foto.jpg
# Nome personalizado
curl -o imagem.png https://site.com/f
# Vários ficheiros
curl -O url1 -O url2
Descarregar ficheiros.
Retomar download
# Continuar transferência (-C -)
curl -C - -O https://site.com/grande.zip
Retomar downloads interrompidos.
Upload de ficheiro
# Upload via form
curl -X POST https://api.com/upload
-F "ficheiro=@documento.pdf"
# Upload binário (PUT)
curl -X PUT https://api.com/file
--data-binary @foto.jpg
Enviar ficheiros.
FTP
# Download via FTP
curl -u user:pass ftp://server/f.txt
# Upload via FTP
curl -u user:pass -T local.txt
ftp://server/remoto.txt
Transferências FTP.
Debug e Inspeção
Verbose
# Detalhes da ligação
curl -v https://site.com
# Só trace de envio/receção
curl --trace - https://site.com
# Trace para ficheiro
curl --trace log.txt url
Diagnóstico detalhado.
Ver pedido enviado
# Mostrar request sem enviar
curl --trace-ascii - url
# Headers do pedido
curl -v url 2>&1 | grep ">"
Inspecionar o request.
Informações da resposta
# Variáveis com -w
curl -s -o /dev/null -w \
"Status: %{http_code}\n
Tempo: %{time_total}s\n
Tamanho: %{size_download}\n" url
Métricas do pedido.
Tempo por fase
curl -s -o /dev/null -w \
"DNS: %{time_namelookup}\n
Ligação: %{time_connect}\n
TTFB: %{time_starttransfer}\n
Total: %{time_total}\n" url
Análise de performance.
Recursos Avançados
Cookies
# Guardar cookies
curl -c cookies.txt https://site.com
# Enviar cookies
curl -b cookies.txt https://site.com
# Cookie manual
curl -b "sessao=abc" url
Gestão de cookies.
Redirects
# Seguir redirects
curl -L http://site.com
# Máximo de redirects
curl -L --max-redirs 5 url
# Ver destino final
curl -L -o /dev/null -w "%{url_effective}" url
Seguir redirecionamentos.
SSL / TLS
# Ignorar certificado (teste)
curl -k https://self-signed.com
# Certificado específico
curl --cacert cert.pem url
# Forçar versão TLS
curl --tlsv1.2 url
Segurança SSL.
Proxy
# Usar proxy
curl -x http://proxy:8080 url
# Proxy com autenticação
curl -x http://user:pass@proxy:8080 url
# Sem proxy para host
curl --noproxy "localhost" url
Ligação via proxy.
Formatação e Truques
Formatar JSON com jq
# Formatado e colorido
curl -s https://api.com/users | jq
# Extrair campo
curl -s url | jq '.data.nome'
# Array de nomes
curl -s url | jq '.[].nome'
Processar respostas JSON.
Boas práticas
• Usar -s em scripts (sem progresso)
• Sempre -L se houver redirects
• Verificar %{http_code} em automação
• Usar -k só em testes locais
• Proteger tokens (não em histórico)
• Preferir --data-urlencode para dados
Convenções de uso.
Guardar headers em ficheiro
# Headers separados
curl -D headers.txt -o corpo.html url
# Só headers
curl -sI url > headers.txt
Separar headers e corpo.
Múltiplos pedidos
# Sequência de URLs
curl "https://api.com/page[1-3]"
# Padrão de nomes
curl -O "https://site.com/img[01-10].png"
URLs em sequência.
Config file (.curlrc)
# ~/.curlrc
-H "Accept: application/json"
--connect-timeout 10
-L
# Usar config específico
curl --config meu.curlrc url
Predefinições persistentes.