cURL

cURL
DesenvolvedorContributors to the cURL project
Lançamento inicial1997
Lançamento estável
8.18.0[1]Edit this on Wikidata / 7 janeiro 2026
Repositório
PlataformaIA-32, x64
LicençaFree Software: MIT/X derivate license
Websitecurl.se Edit this on Wikidata

O cURL (pronuncia-se [kɜːrl];[2] acrônimo de "client-URL"[3]) é 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),[4] desenvolvida pelo sueco Daniel Stenberg em 1997,[5] 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).[6]

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.[7]

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.[8]

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.[6]

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.[9]

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:[10]

Manual Rápido[11]

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[11]

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[11]

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[11]

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[11]

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: 67

O 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:

  1. Diretório onde o programa cURL está localizado.
  2. Diretório de trabalho atual.
  3. Diretório do sistema do Windows.
  4. Diretório do Windows.
  5. Diretórios especificados nas variáveis de ambiente %PATH%.[12]

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,[13][14] 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,[15] GnuTLS, mbed TLS, NSS, QSOSSL no IBM i, SChannel no Windows, Secure Transport no macOS e iOS, SSL / TLS pelo OpenSSL, e wolfSSL.[16]

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.[17]

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.[18]

Exemplo de libcurl

Exemplo de uso usando a linguagem php:[19]

<?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:[19]

<?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[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
$header[0] .= "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

Referências

  1. "curl 8.18.0"; nome do autor: Daniel Stenberg; língua da obra ou do nome: inglês; data de publicação: 7 janeiro 2026; data de acesso: 7 janeiro 2026.
  2. «curl - Frequently Asked Questions». curl.se. Consultado em 20 de agosto de 2025 
  3. «Origin of the name». curl.haxx.se/ (em inglês) 
  4. «Curl declara guerra aos relatórios de bugs gerados por IA». 12 de maio de 2025. Consultado em 20 de agosto de 2025 
  5. «curl, 17 years old today». Daniel Haxx 
  6. a b «libcurl - your network transfer library». curl.se. Consultado em 29 de janeiro de 2026 
  7. «curl». curl.se. Consultado em 29 de janeiro de 2026 
  8. «curl». curl.se. Consultado em 29 de janeiro de 2026 
  9. «tiny-curl». curl.se. Consultado em 29 de janeiro de 2026 
  10. «curl - Tutorial». curl.se. Consultado em 29 de janeiro de 2026 
  11. a b c d e «curl - Tutorial». curl.se. Consultado em 29 de janeiro de 2026 
  12. «curl». SSL CA Certificates (em inglês). Consultado em 20 de agosto de 2025 
  13. «Conversing through the Internet with cURL and libcurl - Using libcurl with C and Python». IBM Developerworks 
  14. «curl vs Wget». daniel.haxx.se. Consultado em 20 de agosto de 2025 
  15. «axTLS Embedded SSL». Axtls Sourceforge. Consultado em 20 de agosto de 2025 
  16. «libcurl - your network transfer library». curl.se. Consultado em 29 de janeiro de 2026 
  17. «Open Source Components for the Native SDK for BlackBerry® Tablet OS». Blackberry Github. Consultado em 20 de agosto de 2025. Cópia arquivada em 27 de janeiro de 2013 
  18. «Curl to Code - J2TEAM Security». j2team.org (em inglês). Consultado em 29 de janeiro de 2026 
  19. a b «PHP: curl_setopt - Manual». www.php.net (em inglês). Consultado em 15 de setembro de 2025 

Ligações externas