O cURL (; acrônimo de "client-URL") é uma interface de linha de comando (CLI) de código aberto para transferência de arquivos entre o computador cliente e o servidor usando vários protocolos (função de upload/download), desenvolvida pelo sueco Daniel Stenberg em 1997, para fazer testes em API e, para o desenvolvedor e o administrador de sistemas fazer uma interação eficiente e simples. É formado por uma biblioteca/subprogramas (libcurl) e uma ferramenta de linha de comando (curl).
cURL cURL é uma ferramenta de linha de comando utilizada para obter ou enviar dados, incluindo arquivos, usando a sintaxe URL. Também cria um script que emita automaticamente várias solicitações de API e, armazena as respostas em um arquivo ou criado selecionado pelo utilizador.
Devido à sua ampla compatibilidade, flexibilidade e robustez, o cURL é amplamente utilizado ou disponível em quase todos os ambientes de desenvolvimento, automação, testes de APIs, administração de sistemas e diagnóstico de redes.
O cURL pode ser compilado com diferentes bibliotecas de segurança para suporte a SSL/TLS, incluindo GnuTLS, mbed TLS, NSS, QSOSSL no IBM i, SChannel no Windows, Secure Transport no macOS e iOS, além de OpenSSL e wolfSSL.
cURL suporta vários protocolos de rede comuns, incluindo HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, LDAP, DAP, DICT, IMAP, POP3, SMTP e RTSP.
Tiny-cURL Tiny-cURL é uma versão leve da libcurl desenvolvida pela wolfSSL Inc. para dispositivos embarcados e com recursos limitados. Ela implementa funcionalidades HTTPS em aproximadamente 100 KB de código em arquiteturas típicas de 32 bits.
Exemplo de cURL Irei utilizar o shell de linha de comando Windows Powershell para demonstrar o comando e as flags que são possíveis utilizar com cURL. Entretanto, a maioria dos comandos aqui funcionam da mesma forma em Linux.
O CLI do cURL tem apenas um comando, que é curl, esse comando "inicial" é manipulado por diversas flags (ou opções) disponíveis. Veremos alguns comandos básicos:
Manual Rápido C:\Users\wikipedista_editor\temp> curl --help
#Retorna o manual básico de flags (ou opções) do cUrl:
C:\Users\wikipedista_editor\temp> curl --help curl --help Usage: curl [options...] <url> -d, --data <data> HTTP POST data -f, --fail Fail fast with no output on HTTP errors -h, --help <subject> Get help for commands -o, --output <file> Write to file instead of stdout -O, --remote-name Write output to file named as remote file -i, --show-headers Show response headers in output -s, --silent Silent mode -T, --upload-file <file> Transfer local FILE to destination -u, --user <user:password> Server user and password -A, --user-agent <name> Send User-Agent <name> to server -v, --verbose Make the operation more talkative -V, --version Show version number and quit
This is not the full help; this menu is split into categories. Use "--help category" to get an overview of all categories, which are: auth, connection, curl, deprecated, dns, file, ftp, global, http, imap, ldap, output, pop3, post, proxy, scp, sftp, smtp, ssh, telnet, tftp, timeout, tls, upload, verbose. Use "--help all" to list all options
GET simples C:\Users\wikipedista_editor\temp> curl https://guthib.com/
#Retorna o HTML de uma página web:
C:\Users\wikipedista_editor\temp> curl https://guthib.com/ <style type="text/css"> h1 { text-align: center; font-size: 120px; font-family: Helvetica, Verdana, Arial; } </style> <h1>You spelled it wrong.</h1>
Retornar Header C:\Users\wikipedista_editor\temp> curl -I https://guthib.com/
#Retorna o Header de uma página web:
C:\Users\wikipedista_editor\temp> curl -I https://guthib.com/ HTTP/1.1 200 OK Accept-Ranges: bytes Access-Control-Allow-Origin: * Age: 5618664 Cache-Control: public, max-age=0, must-revalidate Content-Disposition: inline Content-Length: 155 Content-Type: text/html; charset=utf-8 Date: Thu, 29 Jan 2026 19:12:44 GMT Last-Modified: Tue, 25 Nov 2025 18:28:20 GMT Server: Vercel Strict-Transport-Security: max-age=63072000 X-Vercel-Cache: HIT X-Vercel-Id: gru1::8zxln-1769713964804-926c759cd5fb
Baixar Arquivo C:\Users\wikipedista_editor\temp> curl https://guthib.com/ -o meu_arquivo.html
#Baixa qualquer arquivo disponível de uma URL:
C:\Users\wikipedista_editor\temp> curl https://guthib.com/ -o meu_arquivo.html % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 155 100 155 0 0 1334 0 --:--:-- --:--:-- --:--:-- 1383
Enviar Arquivo C:\Users\wikipedista_editor\temp> curl -T arquivo.txt https://exemplo.com/arquivo.txt
#Envia qualquer arquivo para uma URL disponível a receber:
C:\Users\wikipedista_editor\temp> curl -T arquivo.txt https://exemplo.com/arquivo.txt HTTP/1.1 201 Created Content-Length: 67O cURL suporta HTTPS e executa a verificação de certificado SSL por padrão quando um protocolo seguro é especificado, como HTTPS. Quando o cURL se conecta a um servidor remoto via HTTPS, ele obtém o certificado do servidor remoto e verifica em seu armazenamento de certificados CA a validade do mesmo, de modo a garantir que o servidor remoto seja aquele que afirma ser. Alguns pacotes cURL são embutidos com um arquivo que armazena os certificados CA. Existem várias opções para especificar um certificado de CA, como --cacert e --capath . A opção --cacert pode ser usada para especificar o local do arquivo onde o certificado CA está armazenado. Na plataforma Windows, se um arquivo de certificado de CA não for especificado, o cURL procurará por um arquivo com nome “curl-ca-bundle.crt” na seguinte ordem: Diretório onde o programa cURL está localizado. Diretório de trabalho atual. Diretório do sistema do Windows. Diretório do Windows. Diretórios especificados nas variáveis de ambiente %PATH%.
O cURL retornará uma mensagem de erro se o servidor remoto estiver usando um certificado auto assinado ou se o certificado do servidor remoto não estiver assinado por uma CA listada no arquivo de certificado da CA. A opção -k ou --insecure pode ser usada para pular a verificação de certificados. Como alternativa, se o servidor remoto for confiável, o certificado CA do servidor remoto poderá ser adicionado ao arquivo de armazenamento dos certificados CA.
libcurl A libcurl é uma biblioteca grátis, multi-plataforma e com API, para transferência de URL do lado do cliente, suportando cookies, DICT, FTP, FTPS, Gopher, HTTP (com suporte a HTTP/2 ), HTTP POST, HTTP PUT, proxy HTTP, HTTPS, IMAP, Kerberos, LDAP, POP3, RTSP, SCP e SMTP. A biblioteca suporta o esquema URI de arquivos, SFTP, Telnet, TFTP, retomada de transferência de arquivos, upload de FTP, upload baseado em formulário HTTP, certificados HTTPS, LDAPS, proxies e autenticação de usuário. Suporta: axTLS, GnuTLS, mbed TLS, NSS, QSOSSL no IBM i, SChannel no Windows, Secure Transport no macOS e iOS, SSL / TLS pelo OpenSSL, e wolfSSL.
A biblioteca libcurl é portável e, funciona de forma idêntica em muitas plataformas, incluindo: AIX, AmigaOS, Android , BeOS, BlackBerry Tablet OS e BlackBerry 10, OpenVMS, Darwin, DOS, FreeBSD, HP-UX, HURD, iOS, IRIX, Linux, MacOS , NetBSD, NetWare, OpenBSD, OS / 2, QNX Neutrino, SO RISC, Solaris, Symbian, Tru64, Ultrix, UnixWare e Windows.
A biblioteca libcurl e thread-safe (execução segura em várias threads), e compatível com IPv6. Vinculações estão disponíveis para mais de 40 linguagens, incluindo: C/C++, Java, PHP e Python.
Exemplo de libcurl
Exemplo de uso usando a linguagem php:<?php $ch = curl_init();
// configura a URL e outras opções curl_setopt($ch, CURLOPT_URL, "http://www.example.com/"); curl_setopt($ch, CURLOPT_HEADER, false);
// executa o comando curl, passa a URL ao navegador de internet curl_exec($ch);
// fecha a conexão curl_close($ch); ?>Exemplo de uso usando função em php e cabeçalhos cURL:<?php $url = 'http://www.php.net';
function disguise_curl($url) { $curl = curl_init();
// configuração dos cabeçalhos (baseado no firefox versão 2.0.0.6 ) $header = "Accept: text/xml,application/xml,application/xhtml+xml,"; $header .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; $header[] = "Cache-Control: max-age=0"; $header[] = "Connection: keep-alive"; $header[] = "Keep-Alive: 300"; $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; $header[] = "Accept-Language: en-us,en;q=0.5"; $header[] = "Pragma: "; // browsers keep this blank.
curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.google.com/bot.html)'); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_REFERER, 'http://www.google.com'); curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); curl_setopt($curl, CURLOPT_AUTOREFERER, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_TIMEOUT, 10);
// executa o comando curl $html = curl_exec($curl); // fecha a conexão curl_close($curl); return $html; }
// função que exibe o texto no site $text = disguise_curl($url); echo $text; ?>
Ver também curl-loader - uma ferramenta de teste de código aberto baseada em cURL libwww Wget Rastreador da Web Powershell IWR
Referências
Ligações externas
Comparação de cURL vs outras ferramentas de download de código aberto Comparação de cURL vs wget
Categoria:Bibliotecas para C Categoria:Programas padrões do Unix Categoria:Software de linha de comando Categoria:Software livre multiplataforma