Esta página contém uma lista dos comandos cURL mais utilizados para fazer requisições HTTP/HTTPS e interagir com APIs.
Requisições Básicas #
curl https://exemplo.com # Requisição GET básica
curl -X GET https://exemplo.com # GET explícito
curl -X POST https://exemplo.com # Requisição POST
curl -X PUT https://exemplo.com # Requisição PUT
curl -X DELETE https://exemplo.com # Requisição DELETE
curl -X PATCH https://exemplo.com # Requisição PATCH
curl -X HEAD https://exemplo.com # Requisição HEAD (apenas headers)
curl -X OPTIONS https://exemplo.com # Requisição OPTIONS
Headers (Cabeçalhos) #
curl -H "Content-Type: application/json" url # Definir header
curl -H "Authorization: Bearer token" url # Header de autorização
curl -H "User-Agent: MeuApp/1.0" url # Definir User-Agent
curl -H "Accept: application/json" url # Definir tipo aceito
curl -H "X-Custom-Header: valor" url # Header customizado
curl -A "MeuUserAgent" url # Definir User-Agent (forma curta)
Múltiplos Headers #
curl -H "Content-Type: application/json" \
-H "Authorization: Bearer token" \
-H "Accept: application/json" \
https://api.exemplo.com
Dados POST/PUT #
# Dados simples
curl -d "nome=João&idade=30" url # Dados form-encoded
curl -d '{"nome":"João","idade":30}' url # Dados JSON inline
# A partir de arquivo
curl -d @dados.txt url # Dados de arquivo texto
curl -d @dados.json url # Dados de arquivo JSON
# JSON com header correto
curl -X POST \
-H "Content-Type: application/json" \
-d '{"nome":"João","idade":30}' \
https://api.exemplo.com/usuarios
Upload de Arquivos #
curl -F "arquivo=@/caminho/arquivo.pdf" url # Upload com form multipart
curl -F "campo=valor" -F "arquivo=@foto.jpg" url # Múltiplos campos
curl --form "arquivo=@documento.pdf" url # Sintaxe alternativa
curl -T arquivo.txt ftp://servidor/upload/ # Upload direto (FTP/HTTP PUT)
Autenticação #
# Basic Auth
curl -u usuario:senha url # Autenticação básica
curl -u usuario url # Solicita senha interativamente
curl --basic -u usuario:senha url # Forçar Basic Auth
# Bearer Token
curl -H "Authorization: Bearer SEU_TOKEN" url # Token de autorização
# API Key
curl -H "X-API-Key: SUA_CHAVE" url # API Key personalizada
# Digest Auth
curl --digest -u usuario:senha url # Autenticação Digest
Cookies #
curl -c cookies.txt url # Salvar cookies em arquivo
curl -b cookies.txt url # Usar cookies de arquivo
curl -b "session=abc123; user=joao" url # Cookies inline
curl -c - -b cookies.txt url # Salvar e usar cookies
Redirecionamentos #
curl -L url # Seguir redirecionamentos
curl -L --max-redirs 5 url # Limitar número de redirecionamentos
curl --location-trusted url # Seguir redirecionamentos mantendo auth
Saída e Formatação #
curl -o arquivo.html url # Salvar em arquivo específico
curl -O url/arquivo.zip # Salvar com nome original
curl -s url # Modo silencioso (sem progress)
curl -v url # Modo verbose (detalhes da requisição)
curl -i url # Incluir headers na saída
curl -I url # Apenas headers (HEAD request)
curl -w "%{http_code}" url # Mostrar código HTTP
Informações de Debug #
curl -v url # Verbose - mostrar tudo
curl -vv url # Extra verbose
curl --trace trace.txt url # Salvar trace completo
curl --trace-ascii trace.txt url # Trace em ASCII
curl -w "@format.txt" url # Usar arquivo de formato personalizado
Formato de Saída Personalizado #
# Criar arquivo format.txt
echo 'Status: %{http_code}\nTempo: %{time_total}s\nTamanho: %{size_download} bytes' > format.txt
curl -w "@format.txt" url
# Ou inline
curl -w "Status: %{http_code}\nTempo: %{time_total}s\n" url
Variáveis de Formato Úteis #
%{http_code} # Código de status HTTP
%{time_total} # Tempo total da requisição
%{time_namelookup} # Tempo de resolução DNS
%{time_connect} # Tempo de conexão
%{size_download} # Bytes baixados
%{size_upload} # Bytes enviados
%{speed_download} # Velocidade de download
%{url_effective} # URL final (após redirecionamentos)
Timeouts e Limites #
curl --connect-timeout 10 url # Timeout de conexão (segundos)
curl --max-time 30 url # Timeout total da requisição
curl --retry 3 url # Número de tentativas
curl --retry-delay 2 url # Delay entre tentativas
curl --retry-max-time 60 url # Tempo máximo para tentativas
Proxy #
curl --proxy http://proxy:8080 url # Usar proxy HTTP
curl --proxy socks5://proxy:1080 url # Usar proxy SOCKS5
curl --proxy-user usuario:senha url # Autenticação no proxy
curl --noproxy localhost,127.0.0.1 url # Pular proxy para hosts específicos
SSL/TLS #
curl -k url # Ignorar erros de certificado SSL
curl --insecure url # Sintaxe alternativa
curl --cacert certificado.pem url # Usar certificado CA específico
curl --cert client.pem url # Certificado do cliente
curl --key private.key url # Chave privada do cliente
curl --tlsv1.2 url # Forçar versão TLS específica
Rate Limiting e Controle #
curl --limit-rate 100k url # Limitar velocidade de download
curl --max-filesize 1048576 url # Limite máximo de arquivo (bytes)
curl -Z url1 url2 url3 # Downloads paralelos
curl --parallel-max 5 url1 url2 url3 # Máximo de downloads paralelos
APIs REST Comuns #
GET com Parâmetros de Query #
curl "https://api.exemplo.com/users?page=1&limit=10"
curl -G -d "page=1" -d "limit=10" https://api.exemplo.com/users
POST JSON #
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer TOKEN" \
-d '{
"nome": "João Silva",
"email": "joao@exemplo.com",
"idade": 30
}' \
https://api.exemplo.com/users
PUT para Atualização #
curl -X PUT \
-H "Content-Type: application/json" \
-d '{"nome":"João Santos","idade":31}' \
https://api.exemplo.com/users/123
DELETE #
curl -X DELETE \
-H "Authorization: Bearer TOKEN" \
https://api.exemplo.com/users/123
Testes de API #
Verificar Status da API #
curl -I https://api.exemplo.com/health # Verificar se API está online
curl -w "%{http_code}" -o /dev/null -s url # Apenas código de status
Medir Performance #
curl -w "DNS: %{time_namelookup}s\nConexão: %{time_connect}s\nTotal: %{time_total}s\n" url
Teste de Load Básico #
for i in {1..10}; do
curl -w "Requisição $i: %{http_code} - %{time_total}s\n" \
-o /dev/null -s url
done
Trabalhar com Formulários Web #
Formulário Simples #
curl -d "username=joao&password=123456" \
-X POST \
https://site.com/login
Formulário com Arquivo #
curl -F "nome=João" \
-F "arquivo=@documento.pdf" \
-F "categoria=documentos" \
https://site.com/upload
GraphQL #
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"query": "query { users { id name email } }",
"variables": {}
}' \
https://api.exemplo.com/graphql
Webhooks e Callbacks #
Simular Webhook #
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"evento": "pagamento_aprovado",
"id": "12345",
"valor": 99.99
}' \
https://meusite.com/webhook/pagamento
FTP com cURL #
curl ftp://servidor/arquivo.txt # Download de arquivo FTP
curl -u usuario:senha ftp://servidor/ # FTP com autenticação
curl -T arquivo.txt ftp://servidor/upload/ # Upload via FTP
curl ftp://servidor/ -u usuario:senha --list-only # Listar arquivos
Múltiplas Requisições #
URLs em Sequência #
curl url1 url2 url3 # Múltiplas URLs
curl "https://api.com/page[1-5]" # Range numérico
curl "https://api.com/user{alice,bob,carol}" # Múltiplas opções
Arquivo com URLs #
# Criar arquivo urls.txt com uma URL por linha
curl -K urls.txt # Executar URLs do arquivo
Configuração Global #
Arquivo .curlrc #
Criar arquivo ~/.curlrc
com configurações padrão:
# Sempre seguir redirecionamentos
-L
# Mostrar barra de progresso
--progress-bar
# User-Agent padrão
user-agent = "MeuApp/1.0"
# Timeout padrão
connect-timeout = 10
max-time = 30
Casos de Uso Avançados #
API com Paginação #
#!/bin/bash
page=1
while true; do
response=$(curl -s "https://api.exemplo.com/users?page=$page")
echo "$response" | jq '.data[]' || break
((page++))
done
Health Check #
#!/bin/bash
if curl -f -s --max-time 5 https://api.exemplo.com/health > /dev/null; then
echo "API está funcionando"
else
echo "API está com problemas"
fi
Download com Retry #
curl --retry 3 \
--retry-delay 5 \
--retry-max-time 60 \
-C - \
-o arquivo.zip \
https://servidor.com/arquivo.zip
Análise de Resposta #
Usar com jq para JSON #
curl -s https://api.exemplo.com/users | jq '.'
curl -s https://api.exemplo.com/users | jq '.data[0].name'
Extrair Headers Específicos #
curl -I url | grep -i content-type # Extrair content-type
curl -s -D headers.txt url # Salvar headers em arquivo
Debugging e Troubleshooting #
Problemas de SSL #
curl -vv url 2>&1 | grep -i ssl # Debug SSL específico
curl --ciphers ECDHE-RSA-AES128-GCM-SHA256 url # Forçar cipher específico
Problemas de DNS #
curl --resolve exemplo.com:443:1.2.3.4 url # Forçar resolução DNS
curl --dns-servers 8.8.8.8,8.8.4.4 url # Usar DNS específico
Trace de Rede #
curl --trace-ascii trace.log url # Trace completo
curl --trace-time url # Timestamps no trace
Exemplos Práticos #
API do GitHub #
# Buscar repositórios
curl -H "Authorization: token SEU_TOKEN" \
https://api.github.com/user/repos
# Criar issue
curl -X POST \
-H "Authorization: token SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Bug report","body":"Descrição do bug"}' \
https://api.github.com/repos/usuario/repo/issues
API do Slack #
# Enviar mensagem
curl -X POST \
-H "Authorization: Bearer xoxb-SEU-TOKEN" \
-H "Content-Type: application/json" \
-d '{"channel":"#geral","text":"Olá do cURL!"}' \
https://slack.com/api/chat.postMessage
Monitoramento Simples #
# Script de monitoramento
#!/bin/bash
while true; do
status=$(curl -o /dev/null -s -w "%{http_code}" https://meusite.com)
if [ $status -ne 200 ]; then
echo "$(date): Site fora do ar - Status: $status"
fi
sleep 300 # Verificar a cada 5 minutos
done
Dicas e Boas Práticas #
Performance #
- Use
-s
para requisições em scripts - Use
--compressed
para aceitar compressão - Configure timeouts apropriados
Segurança #
- Nunca coloque senhas em linha de comando (visíveis no histórico)
- Use variáveis de ambiente para tokens
- Valide certificados SSL em produção
Debugging #
- Use
-v
para ver detalhes da requisição - Use
--trace-ascii
para debugging completo - Salve requisições importantes em arquivos
Scripts #
# Usar variáveis para URLs e tokens
API_URL="https://api.exemplo.com"
TOKEN=$(cat ~/.api-token)
curl -H "Authorization: Bearer $TOKEN" \
"$API_URL/endpoint"