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: DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, MQTTS, POP3, POP3S, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS e WSS. 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: 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 clássico começa em texto claro na porta 21 e pode subir a sessão para TLS; o FTPS, 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 e SCP parecem iguais na linha de comando, mas compartilham apenas o transporte: ambos rodam sobre SSH versão 2, com o SCP oferecendo semântica simples de cópia e o SFTP um protocolo de arquivos mais completo. O TFTP é o minimalista sobre UDP, sem autenticação por definição, vivendo no mundo de gravação de firmware e boot de rede. SMB e SMBS 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: -T mensagem.eml mais --mail-from e --mail-rcpt para o envelope. Receber é um download POP3 ou IMAP, 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 na 465, POP3S na 995, IMAPS 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 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 como variante TLS. LDAP e LDAPS 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 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 1.0 conversa com servidores de mídia em streaming; e o TELNET 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 RTMP. 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.