curl, abreviação de “client URL” (URL do cliente), é uma ferramenta de linha de comando usada para transferir dados para um servidor específico por meio de sua URL. O curl é altamente acessível: requer apenas uma interface de linha de comando (CLI) e uma conexão com a Internet, o que o torna amplamente utilizado em roteadores, impressoras, carros e dispositivos médicos. É usado até mesmo em Marte.
Para a maioria dos desenvolvedores, o curl é uma excelente ferramenta para testar rapidamente um serviço de back-end diretamente de qualquer sistema operacional.
Neste artigo, você aprenderá mais sobre o curl e como usá-lo.
História do curl
Originalmente criado e distribuído pelo desenvolvedor brasileiro Rafael Sagula em 1996, Daniel Stenberg assumiu o projeto logo após seu primeiro lançamento, implementando alguns ajustes que permitiram a Stenberg obter automaticamente as taxas de câmbio da web.
Devido à sua função, o curl foi inicialmente chamado de httpget. Quando o número de protocolos suportados aumentou, o nome mudou para urlget. Em 1998, quando o projeto cresceu o suficiente para suportar recursos de upload, ele foi finalmente chamado de curl.
Seu crescimento não parou por aí. Ao longo dos anos, o curl passou a suportar mais de vinte e cinco protocolos e várias funcionalidades, e processa centenas de milhões de solicitações mensalmente. Hoje, o curl é um projeto de código aberto mantido por uma comunidade de membros voluntários em todo o mundo.
O que o curl faz
A ferramenta de linha de comando do curl é conhecida entre os desenvolvedores por sua capacidade de realizar solicitações HTTP rápidas para facilitar suas tarefas de teste e depuração. Ao executar comandos simples usando o terminal do seu computador, o curl pode realizar solicitações GET, POST ou outras solicitações HTTP suportadas pela API especificada.
Embora os usuários interajam mais com a ferramenta de linha de comando do curl, a parte mais difícil do trabalho é realizada por sua biblioteca de desenvolvimento chamada libcurl, uma biblioteca imensa que suporta a maioria das bases de código. Essa parte central do projeto curl funciona nos bastidores, lidando com solicitações e respostas.
Como usar o curl
Para usar as linhas de comando do curl, você precisa de uma CLI para executá-las — Terminal Mac para macOS, Prompt de Comando para Windows ou Bash para Linux — e uma conexão com a Internet para que sua máquina possa concluí-las, mostrar o resultado e ler a resposta, quando houver.
Cada comando curl segue uma sintaxe simples:
curl [OPÇÕES] [URL]
Nesse esquema, [URL] é o endpoint para o qual você está enviando a solicitação, enquanto [OPTIONS] é o comando que determina o tipo de solicitação HTTP que você deseja fazer. O formato padrão é um traço seguido por uma letra (por exemplo, -d) ou, de forma mais detalhada, um traço duplo seguido por uma palavra (por exemplo, --data). Além disso, você pode especificar métodos HTTP usando a sintaxe -X [MÉTODO] (por exemplo, -X POST).
Aqui estão alguns comandos curl que todo desenvolvedor deve conhecer.
Enviando solicitações GET
A forma mais comum de solicitação HTTP é uma solicitação GET. Ela é mais frequentemente usada para recuperar dados — seja como texto, imagem ou arquivo — do endereço especificado. A sintaxe padrão para um comando de solicitação GET do curl é curl [URL]. Nenhuma opção é especificada aqui porque GET é o comportamento padrão implícito definido para um comando curl.
Usando o URL de exemplo https://dummyjson.com/products, uma solicitação GET realizada para este endpoint com o curl fica assim:
curl https://dummyjson.com/products
O resultado desse comando é semelhante a este:

No entanto, nem todas as solicitações GET são tão fáceis de executar. Algumas exigem parâmetros e, embora possam ser especificadas na URL, é mais fácil usar a sintaxe apropriada do curl. Adicione -G para especificar uma solicitação GET seguida de -d “parâmetro1=valor1” para quantos parâmetros forem necessários. A sintaxe deve ficar assim: curl -G -d "parâmetro1=valor1" -d "parâmetro2=valor2" https://yoururl.com/yourendpoint.
Se você enviar uma solicitação GET para a mesma URL de antes, mas definir o número limite como apenas 1, ela deve ficar assim:
curl -G -d "limite=1" https://dummyjson.com/products
O curl usa esse comando para formar a URL completa https://dummyjson.com/products?limit=1 usando a URL base e o parâmetro que você definiu para enviar uma solicitação GET.
Esta seria a saída:

Embora o curl seja poderoso, ele não formata a saída que recebe da solicitação. No Mac, você pode embelezar a resposta adicionando | json_pp à sua linha de comando:

O Windows não vem com essa ferramenta pré-instalada, então você precisa instalar uma ferramenta como o jq e usar seu atalho | jq para obter JSONs com formatação bonita.
Além disso, observe que você pode lidar com solicitações curl usando sua linguagem de programação integrada. Por exemplo, você pode ler mais sobre como gerenciar solicitações GET usando PHP neste blog.
Enviando solicitações POST
Outro HTTP frequentemente usado é o POST, que envia e atualiza dados para um servidor.
A sintaxe básica para uma solicitação POST com curl é curl -X POST [URL]. Esse tipo de solicitação envia uma solicitação POST sem o corpo dos dados, o que pode ser útil quando a solicitação é feita exclusivamente para atualizar o status de um item no banco de dados. Por exemplo, usando a URL de exemplo https://httpbin.org/anything, você pode realizar uma solicitação POST simples com o seguinte comando:
curl -X POST https://httpbin.org/anything
Na maioria das ocasiões, você precisa fazer upload de dados. Para isso, comece informando ao curl como ler o corpo dos dados que você está enviando, especificando seu formato. Adicione um cabeçalho com o comando -H 'HEADER: VALUE' e, em seguida, insira o corpo da sua solicitação usando o comando de dados -d 'VALUE'. A sintaxe completa é curl -X POST -H 'HEADER: VALUE' -d 'VALUE' [URL].
Se você deseja enviar um corpo JSON contendo um nome e um sobrenome, pode usar Content-Type para definir seu tipo de conteúdo como formato JSON e definir um JSON simples como seus dados:
curl -X POST -H "Content-Type: application/json" -d "{
"FirstName": "Joe",
"LastName": "Soap"
}" https://httpbin.org/anything
Aqui está o resultado do comando anterior:

Como você pode ver, o campo de dados contém o corpo dos dados que você enviou em sua solicitação.
A partir da versão 7.82, o curl também introduziu o atalho --json, que simplifica suas solicitações POST com um corpo JSON para curl --json '[CORPO JSON]' [URL]. O comando para realizar a mesma tarefa que antes usando o atalho --json seria o seguinte:
curl --json '{"FirstName": "Joe", "LastName": "Soap"}' https://httpbin.org/anything
Ou, se você tiver um corpo JSON longo que prefere salvar como um arquivo local, pode optar por fazer o upload usando a sintaxe curl --json @[FILENAME].txt [URL]:
curl --json @nome-do-arquivo.txt https://httpbin.org/anything
Você tem várias opções para enviar dados para o seu servidor. Por exemplo, você pode precisar de um formato diferente ou pode querer enviar arquivos para a web. Você pode ler mais sobre solicitações POST com curl aqui.
Conectando-se por meio de Proxies
Muitos desenvolvedores usam servidores Proxy para melhorar a segurança. Assim como um firewall, um servidor Proxy confiável protege seus usuários e sua rede contra possíveis ameaças na Internet. Ele também oferece maior privacidade.
Para usar um Proxy corretamente, você precisa das seguintes informações sobre o seu Proxy:
- O protocolo, como
http:// - O host, geralmente quatro números separados por pontos, como
71.00.00.00 - A porta, normalmente um número de quatro dígitos, como
0000 - Credenciais (opcionais) na forma de um nome de usuário e uma senha
A sintaxe da URL do seu Proxy segue o esquema [PROTOCOLO]://[[NOME DE USUÁRIO]:[SENHA]][HOST]:[PORTA] ou, se o Proxy não for protegido por credenciais, [PROTOCOLO]://[HOST]:[PORTA].
Depois de obter a URL do Proxy, você pode configurá-la no curl usando o comando -x. Observe que isso é diferente de -X, que se refere a um método de solicitação HTTP personalizado. (Lembre-se de que o curl diferencia maiúsculas de minúsculas.) Você também pode usar a opção mais detalhada --proxy, se achar mais fácil de lembrar. Qualquer um dos comandos deve ser seguido pela URL do Proxy e pela URL final.
Considerando os pontos mencionados, seu comando curl para configurar uma URL de Proxy deve ser semelhante a este:
curl --Proxy "http://71.00.00.00:0000" https://httpbin.org/ip
Sua resposta deve conter um objeto de origem, e seu valor deve corresponder ao endereço IP do host do seu Proxy:
{
"origin": "71.00.00.00"
}
Isso significa que o site considera que a solicitação vem do endereço IP do seu Proxy, e não do seu computador.
Para saber mais sobre como usar o curl com Proxies, confira este blog.
Usando cabeçalhos
Como você deve ter notado, algumas solicitações HTTP exigem informações adicionais para concluir uma tarefa corretamente. Por exemplo, você usou o cabeçalho Content-Type em sua solicitação POST anteriormente para informar ao curl como ler o corpo dos dados que você enviou.
Os cabeçalhos, que são sempre precedidos pelo comando -H, também podem ser usados em várias outras ocasiões.
Um tipo comum de cabeçalho é Authorization: Bearer [TOKEN], que especifica um token de portador para autenticar e acessar uma URL protegida. Outro cabeçalho comumente usado é Accept: application/json, que especifica uma preferência de resposta JSON.
Se você deseja receber uma lista dos cabeçalhos de resposta para uma URL, pode usar o comando -I curl em seu terminal, desta forma:
curl -I https://dummyjson.com/products
Você também pode usar -i para mostrar a resposta à solicitação junto com os cabeçalhos.
Você pode ler mais sobre cabeçalhos no curl neste blog.
Salvando saídas
Às vezes, ler os dados não é suficiente e você precisa salvar essas saídas em algum lugar no seu computador. Como mencionado anteriormente, o curl é capaz de lidar com dados que vêm em formatos diferentes de texto. Por exemplo, ele pode baixar ou enviar arquivos inteiros.
Usando o comando -o, você pode especificar o nome e o local do arquivo que deseja salvar. Por exemplo, se você quiser salvar o conteúdo desta página no formato TXT em sua área de trabalho, pode usar este comando:
curl -o /Users/User/Desktop/file.txt https://brightdata.com/blog
Execute este comando e abra sua área de trabalho para ver o arquivo recém-salvo.
Upload de arquivos
Assim como o curl é capaz de baixar arquivos da web, ele também permite que você os envie. Para informar ao curl que você não está enviando dados em formato textual, mas sim como um arquivo real, você deve colocar o símbolo @ antes do nome do arquivo.
Muitos desenvolvedores cometem o erro de usar apenas o sinalizador -X POST, pensando que esse é o comando correto para enviar arquivos para um servidor usando o curl. No entanto, o envio de arquivos normalmente requer o tipo de conteúdo multipart/form-data, pois os arquivos são anexados como parte de um formulário. Portanto, você precisa definir o tipo de cabeçalho correto junto com o sinalizador -X POST. O sinalizador -F define o cabeçalho do tipo de conteúdo correto e o sinalizador -X POST automaticamente, o que resulta em um comando mais curto e simples para você.
Com o sinalizador -F, você pode enviar um formulário especificando os valores dos campos do formulário. Para anexar um arquivo como um campo de formulário, use o símbolo @ antes do nome do arquivo.
A sintaxe correta é curl -F "file=@[CAMINHO DO ARQUIVO]/[NOME DO ARQUIVO].txt" [URL], onde file é o nome do campo do arquivo no formulário. Por exemplo, supondo que você queira enviar o arquivo baixado anteriormente para uma URL fictícia como https://example.com/upload, seu comando deve ficar assim:
curl -F "file=@/Users/User/Desktop/file.txt" https://example.com/upload
Se você deseja enviar mais de um arquivo, pode repetir a sintaxe do comando -F quantas vezes quiser antes da definição da URL.
Casos de uso do curl
Devido à sua alta compatibilidade e versatilidade, o curl pode ser usado em uma ampla variedade de cenários diferentes.
O uso mais comum do curl é como um cliente HTTP para realizar testes de API, interagir com serviços da web e executar diferentes operações HTTP, como GET ou POST. Várias linguagens de programação também usam libcurl para realizar solicitações HTTP internamente.
Embora o curl seja principalmente voltado para a execução de solicitações HTTP e a recuperação de suas respostas, ele também pode ser combinado com outras ferramentas ou scripts para realizar Parsing e processar o conteúdo recebido. Por exemplo, ele pode recuperar o conteúdo HTML de uma página da web como parte do Scraping de dados.
Vantagens do curl
O curl oferece muitas vantagens. As mais notáveis são sua alta taxa de compatibilidade, que o torna utilizável por quase qualquer dispositivo, e sua sintaxe, que é simples de aprender e dominar.
O curl também é rico em recursos, versátil, rápido e particularmente leve, o que permite que ele execute tarefas sem sobrecarregar sua CPU.
Conclusão
Neste artigo, você aprendeu mais sobre a história do curl, como ele funciona, seus casos de uso e suas vantagens. Você também viu como executar alguns dos comandos mais básicos com o curl.
E se você estiver interessado em maneiras mais rápidas de fazer Scraping de dados, não deixe de conferir a API Bright Data Web Scraper. Inscreva-se agora para um teste gratuito!