O comando curl é um comando versátil que está disponível na maioria dos sistemas Linux e como o próprio nome do comando sugere é uma abreviação de “Cliente URL“. Ele é utilizado para a verificação de conectividade, transferência de dados, permitindo também o teste de diversas APIs Web.

Ele fornece diversos recursos interessantes como suporte a proxy, autenticação de usuário, upload de FTP, HTTP POST, cookies, resumo de transferência.

O curl suporta diversos protocolos entre eles: HTTP, HTTPS, FILE, FTP, FTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET e TFTP.

Básico Comando CURL

A sintaxe básica do comando se assemelha com isto

curl [OPTIONS] [URL]

O uso mais simples é exibir o conteúdo de uma página, vejamos como:

curl umdominio.com.br/pagina.php

Se nenhum protocolo for informado pela url o protocolo http é assumido. O comando por padrão exibe o conteúdo da página no terminal.

Fazendo download

Podemos realizar o download da página ou arquivo utilizando as seguintes opções:

  • -O: Salva a página/arquivo no diretório corrente com o mesmo nome que tinha no endereço
  • -o: Salva a página/arquivo com o nome/caminho especificado logo após o comando.
#irá salvar no mesmo diretório o arquivo com o nome pagina.php
curl -O http://umdominio.com.br/pagina.php

# irá salvar no diretório atual o arquivo com nome arquivo_download.zip
curl -o arquivo_download.zip http://umdominio.com.br/files.zip
curl realizando download de um arquivo
curl realizando download de um arquivo

O curl também permite reiniciar um download interrompido utilizando a opção -C. Esta opção recebe um valor após ela que será o a quantidade de bytes pulado do download, para facilitar pode ser utilizado o -C - para ele automaticamente encontrar onde e como resumir a transferência do ponto correto.

curl -C - -O http://umdominio.com.br/files.zip

Lembrando também que o comando permite informar diversos arquivos em sequencia para serem baixados.

curl -O http://umdominio.com.br/pagina1.html -O http://umdominio.com.br/foto01.jpg -O http://umdominio.com.br/foto02.jpg

Sendo que se os arquivos a serem baixados tiverem algum padrão de sequencia, podemos fazer de forma mais fácil, fornecendo um intervalo de valores( com [] ) ou uma lista(com {} ).

#realiza o download dos arquivos file01.txt, file02.txt, file02.txt ... file09.txt
curl -O http://umdominio.com.br/file0[1-9].txt

#realiza o download dos arquivos file01a.txt, file01b.txt, file01c.txt ... file01f.txt
curl -O http://umdominio.com.br/file01[a-f].txt

#realiza o download dos arquivo imagem-p.png, imagem-m.png, imagem-g.png
curl -O "http://umdominio.com.br/imagem-{p,m,g}.png"

Podemos combinar vários intervalos e listas para formar um padrão de url. No exemplo os arquivos serão salvos com o mesmo nome do servidor, para definir outro nome podemos utilizar a opção -o que vimos anteriormente e utilizar o # seguido de um numero(iniciando em 1) para substituir pelo valor corrente do intervalo ou lista. Por exemplo:

curl -o "#1_file_#2.txt" http://{sub1,sub2}.umdominio.com.br/file0[1-2].txt

O comando acima irá baixar os arquivos com os nomes sub1_file_1.txt, sub1_file_2.txt, sub2_file_1.txt, sub2_file_2.txt.

Requisição POST com curl

Por padrão o curl realiza uma requisição http do tipo GET, e para realizar uma requisição POST utilizamos um podemos informar uma opção –X POST, ou simplesmente passar dados que serão enviados junto ao corpo da requisição. Para isto utilizamos o parâmetro -d

curl -X POST -d "nome=rodrigo&sobrenome=aramburu"  https://www.botecodigital.dev.br/exemplos/requisicao.php

Informamos após a opção -d os valores que serão enviados via POST, como se fossem enviados via formulário, no exemplo enviamos um valor com a chave “nome” e valor “rodrigo” e outro valor com a chave “sobrenome” com o valor “aramburu”.

Enviando Headers com CURL

Podemos também enviar um ou mais headers(cabeçalhos) para uma requisição, para isto utilizamos o parâmetro -H

curl -H "Content-type: application/json" -H "Accept: application/json"  https://www.botecodigital.dev.br/exemplos/requisicao.php

Enviando Cookies com CURL

Podemos enviar um cookie para uma url através do parâmetro --cookie passando logo em seguida os valores no formato chave=valor.

curl --cookie "meu-cookie=1234"  https://www.botecodigital.dev.br/exemplos/requisicao.php

Para armazenarmos um cookie enviado pelo servidor podemos utilizar a opção --cookie-jar seguido do nome de um arquivo onde serão gravados os valores dos cookies enviados pelo servidor.

 curl --cookie-jar site-cookies.txt  https://www.botecodigital.dev.br/exemplos/requisicao.php

E para enviar os cookies armazenados no arquivo utilizamos opção --cookie passando o nome do arquivo.

 curl --cookie site-cookies.txt  https://www.botecodigital.dev.br/exemplos/requisicao.php

Utilizando Proxy

Caso você esta utilizando o comando atrás de um proxy podemos informá-lo através da opção -x

 curl -x 119.252.168.218:7676  https://www.botecodigital.dev.br/exemplos/requisicao.php

Caso o proxy precise de usuário e senha podemos fornecer através da opção - U passado os dados no formato user:password

Bom era isso, espero que ajude. T++.