cURL
| cURL | |
|---|---|
| Desenvolvedor | Contributors to the cURL project |
| Lançamento inicial | 1997 |
| Lançamento estável | 8.18.0[1] |
| Repositório | |
| Plataforma | IA-32, x64 |
| Licença | Free Software: MIT/X derivate license |
| Website | curl |
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:
- 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%.[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
- curl-loader - uma ferramenta de teste de código aberto baseada em cURL
- libwww
- Wget
- Rastreador da Web
- Powershell IWR
Referências
- ↑ "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.
- ↑ «curl - Frequently Asked Questions». curl.se. Consultado em 20 de agosto de 2025
- ↑ «Origin of the name». curl.haxx.se/ (em inglês)
- ↑ «Curl declara guerra aos relatórios de bugs gerados por IA». 12 de maio de 2025. Consultado em 20 de agosto de 2025
- ↑ «curl, 17 years old today». Daniel Haxx
- ↑ a b «libcurl - your network transfer library». curl.se. Consultado em 29 de janeiro de 2026
- ↑ «curl». curl.se. Consultado em 29 de janeiro de 2026
- ↑ «curl». curl.se. Consultado em 29 de janeiro de 2026
- ↑ «tiny-curl». curl.se. Consultado em 29 de janeiro de 2026
- ↑ «curl - Tutorial». curl.se. Consultado em 29 de janeiro de 2026
- ↑ a b c d e «curl - Tutorial». curl.se. Consultado em 29 de janeiro de 2026
- ↑ «curl». SSL CA Certificates (em inglês). Consultado em 20 de agosto de 2025
- ↑ «Conversing through the Internet with cURL and libcurl - Using libcurl with C and Python». IBM Developerworks
- ↑ «curl vs Wget». daniel.haxx.se. Consultado em 20 de agosto de 2025
- ↑ «axTLS Embedded SSL». Axtls Sourceforge. Consultado em 20 de agosto de 2025
- ↑ «libcurl - your network transfer library». curl.se. Consultado em 29 de janeiro de 2026
- ↑ «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
- ↑ «Curl to Code - J2TEAM Security». j2team.org (em inglês). Consultado em 29 de janeiro de 2026
- ↑ a b «PHP: curl_setopt - Manual». www.php.net (em inglês). Consultado em 15 de setembro de 2025