Pergunte à maioria dos engenheiros o que o curl faz e a resposta será "requisições HTTP". Verdade, e radicalmente incompleta. A versão atual da ferramenta curl fala 27 esquemas de URL, e a lista oficial em curl.se parece um passeio pela história das redes: , FILE, , , , GOPHERS, HTTP, HTTPS, , , , , , , , POP3S, , , , , SMBS, , SMTPS, , , e . Este artigo percorre o mapa: para que serve cada família, quais esquemas começam dentro de TLS e as semânticas do curl que surpreendem na primeira vez.
Uma ferramenta, uma gramática
A razão de uma ferramenta só cobrir tanto terreno é que o curl trata tudo como uma transferência endereçada por URL: um esquema, um host e um caminho com sabor de protocolo. O que muda por protocolo é o significado de "download" e "upload". Em HTTP, download é um GET e upload com -T é um PUT. Em FTP e SFTP, são busca e gravação de arquivos. Em SMTP, fazer upload de uma mensagem significa enviá-la. Em MQTT, baixar um tópico significa assiná-lo, e postar dados com -d significa publicar. Em POP3, o download busca um e-mail. A gramática permanece constante; os verbos são reinterpretados.
Mais uma peça da gramática: se você der ao curl uma URL sem esquema, ele adivinha. O palpite padrão é HTTP, mas prefixos comuns de hostname o direcionam, então um hostname começando com "ftp." é assumido como FTP. Conveniente no uso interativo, e melhor evitar em scripts, onde um esquema explícito documenta a intenção.
A família web: HTTP, HTTPS, WS, WSS
HTTP e HTTPS dispensam apresentação; o curl fala de HTTP/0.9 a HTTP/3, dependendo do build e das flags, e é aqui que mora a modelagem rica de requisições: métodos, cabeçalhos, cookies, formulários multipart, redirecionamentos, compressão. WS e WSS são WebSocket (sendo o WSS a forma segura com TLS): um canal bidirecional, parecido com TCP, inicializado sobre uma requisição HTTP ou HTTPS, útil para cutucar endpoints de socket a partir do shell.
A família de transferência: FTP, FTPS, SFTP, SCP, TFTP, SMB, SMBS, FILE
Este é o território original do curl. O FTP (Protocolo de Transferência de Arquivos, do inglês File Transfer Protocol) clássico começa em texto claro na porta 21 e pode subir a sessão para TLS; o FTPS (FTP sobre TLS), em vez disso, embrulha a conexão em TLS desde o primeiro byte, e suas conexões de dados separadas irritam firewalls há décadas. SFTP (Protocolo de Transferência de Arquivos por , do inglês SSH File Transfer Protocol) e SCP (Protocolo de Cópia Segura, do inglês Secure Copy Protocol) parecem iguais na linha de comando, mas compartilham apenas o transporte: ambos rodam sobre SSH (shell seguro, do inglês Secure Shell) versão 2, com o SCP oferecendo semântica simples de cópia e o SFTP um protocolo de arquivos mais completo. O TFTP (Protocolo Trivial de Transferência de Arquivos, do inglês Trivial File Transfer Protocol) é o minimalista sobre UDP, sem autenticação por definição, vivendo no mundo de gravação de e boot de rede. SMB (Bloco de Mensagens de Servidor, do inglês Server Message Block) e SMBS (SMB sobre TLS) alcançam compartilhamentos Windows, com uma ressalva que a ferramenta deve dizer em voz alta: o curl fala SMB versão 1, que servidores modernos frequentemente desabilitam. E file:// dispensa a rede por completo, o que o torna perfeito para testar um pipeline com sintaxe real de curl antes de apontá-lo para a produção.
A família de e-mail: SMTP, POP3, IMAP e seus gêmeos TLS
O curl é um cliente de e-mail completo, ainda que espartano. Enviar é um upload SMTP (Protocolo Simples de Transferência de Correio, do inglês Simple Mail Transfer Protocol): -T mensagem.eml mais --mail-from e --mail-rcpt para o envelope. Receber é um download POP3 (Protocolo de Correio versão 3, do inglês Post Office Protocol version 3) ou IMAP (Protocolo de Acesso a Mensagens da Internet, do inglês Internet Message Access Protocol), com a URL do IMAP selecionando caixa e mensagem. Cada um dos três vem em dois sabores: uma porta em texto claro que pode subir para TLS dentro da sessão (STARTTLS em SMTP e IMAP, STLS em POP3), e um gêmeo com TLS implícito em porta própria: SMTPS (SMTP sobre TLS) na 465, POP3S (POP3 sobre TLS) na 995, IMAPS (IMAP sobre TLS) na 993. A regra prática: nos sabores com upgrade, adicione --ssl-reqd para a transferência falhar em vez de continuar em texto claro caso o servidor não ofereça o upgrade.
Mensageria, consultas e a ala do museu
O MQTT (Transporte de Telemetria por Enfileiramento de Mensagens, do inglês Message Queuing Telemetry Transport) dá ao curl um pé em IoT: versão 3 do protocolo publish-subscribe, em que assinar é um download e publicar é -d com dados postados na URL do tópico, com o MQTTS (MQTT sobre TLS) como variante TLS. LDAP (Protocolo Leve de Acesso a Diretórios, do inglês Lightweight Directory Access Protocol) e LDAPS (LDAP sobre TLS) empacotam uma consulta de diretório inteira, DN base, atributos, escopo e filtro, em uma única URL. Depois vem a ala do museu, ainda mantida e de vez em quando exatamente o que você precisa: o DICT (Protocolo de Servidor de Dicionário, do inglês Dictionary Server Protocol) consulta servidores de dicionário com URLs como dict://dict.org/d:curl; o Gopher, protocolo de documentos anterior à web, ganhou um gêmeo moderno GopherS; o RTSP (Protocolo de Streaming em Tempo Real, do inglês Real-Time Streaming Protocol) 1.0 conversa com servidores de mídia em streaming; e o TELNET (Rede de Teletipo, do inglês Teletype Network) transforma o curl em um cliente TCP cru interativo, que envia o stdin e imprime o que voltar.
Uma nota histórica: builds antigos do curl também listavam a família de streaming (Protocolo de Mensagens em Tempo Real, do inglês Real-Time Messaging Protocol). Ela sobrevive apenas em builds ligados à librtmp e está ausente da lista oficial atual, e é por isso que ferramentas voltadas ao curl atual a tratam como legado.
O mapa do texto claro é o mapa de segurança
Ordene os 27 esquemas por postura de TLS e uma checklist de segurança cai no colo. Um grupo começa dentro de proteção criptográfica: HTTPS, WSS, FTPS, SFTP, SCP, SMBS, SMTPS, POP3S, IMAPS, MQTTS, LDAPS (SFTP e SCP herdam a proteção do SSH em vez do TLS, mesmo efeito prático). Um segundo grupo começa em texto claro mas pode subir dentro da sessão: FTP, SMTP, POP3, IMAP, LDAP. Todo o resto, HTTP, WS, TFTP, SMB, DICT, GOPHER, RTSP, TELNET, roda em claro, ponto final. Credenciais enviadas pelo terceiro grupo cruzam a rede legíveis; pelo segundo grupo também, a menos que você force o upgrade. Esse é o argumento inteiro a favor do --ssl-reqd, e a favor de ler o esquema antes de ler qualquer outra coisa em um comando.
Experimente
O construtor de comandos curl transforma este artigo em bancada de trabalho: escolha qualquer um dos 27 protocolos, receba o explicador, preencha campos adaptados ao protocolo e copie o comando exato com cada flag explicada. Seu inverso, o tradutor de requisições HTTP, lê de volta para você um comando colado.