Curl é um utilitário de linha de comando usado como um cliente HTTP. É popular para fazer solicitações HTTP a partir da linha de comando. O cURL pode ser usado para escrever scripts para web scraping, verificar a integridade de um site e baixar arquivos da linha de comando.
É incrivelmente simples e pode ser usado em muitas linguagens de programação. Este artigo orienta o que é cURL e como usá-lo no Python.
últimas postagens
O que é cURL?
De acordo com o site, cURL significa “URL do cliente”. É uma ferramenta de linha de comando e uma biblioteca para transferência de dados usando diferentes protocolos de rede da camada de aplicativo, como HTTP, HTTPS, FTP e IMAP.
É incrivelmente popular e usado em mais de 10 bilhões de instalações em dispositivos como rádios, TVs, roteadores, impressoras e computadores. cURL é totalmente gratuito e de código aberto. Seu código-fonte está disponível no GitHub.
Casos de uso do cURL
cURL é muito útil e versátil. Listados abaixo estão os casos de uso mais populares para cURL. Embora a lista não seja exaustiva, os seguintes são apenas alguns dos casos mais populares:
- APIs de teste: pode verificar se a API funciona corretamente, retornando os dados corretos para uma determinada solicitação. Além disso, também pode ser usado para verificar a velocidade da API, ou seja, a rapidez com que ela responde às solicitações. Você pode escrever um script para verificar a integridade da API periodicamente e enviar alertas quando algo der errado.
- Web Scraping: também pode extrair automaticamente dados de sites. cURL pode ser usado em conjunto com muitas linguagens de programação e como um comando Bash. Com cURL, você pode buscar dados de sites dinamicamente. A partir do HTML de resposta, você pode analisar e extrair os dados necessários. Se você estiver interessado em web scraping, talvez queira verificar a API de web Scraping etechpt.com, que facilita a extração de dados.
- Download de dados: Com cURL, você pode salvar a resposta das solicitações em um arquivo. Essas respostas podem ser dados de solicitações de API ou arquivos de um servidor. Efetivamente, ao escrever a resposta em um arquivo, você baixou o arquivo. Como o cURL é uma ferramenta de linha de comando, você pode automatizar esse processo para baixar muitos arquivos de uma só vez.
Como usar cURL em Python (PycURL)
Instalando o PycURL
Para usar cURL em Python, usamos a biblioteca PycURL. PycURL é uma interface Python para a biblioteca cURL. Ele cria um wrapper fino sobre a já rápida biblioteca cURL. Isso torna o PycURL mais rápido do que outras bibliotecas para fazer solicitações como urllib e solicitações. Para usar o PycURL, primeiro você precisa instalá-lo. Existem instruções detalhadas aqui, mas uma maneira fácil de instalá-lo é usando o pip.
pip install PycURL
No Ubuntu 22.04, tive que instalar ferramentas adicionais antes de instalar o PycURL. Use este comando antes de tentar instalar o PycURL com pip:
sudo apt install libcurl4-openssl-dev libssl-dev
Fazendo uma solicitação GET simples
Para fazer uma solicitação, comece criando um script Python no qual gravar o código. Abra o arquivo com um editor de texto. Vou usar o Vim, mas você pode usar o que quiser. Para abrir o arquivo com o Vim, você usa o comando abaixo:
vim pycurl.py
Aqui, pycurl.py é o nome do arquivo no qual vou escrever meu código, mas você pode nomear seu arquivo como quiser.
Em seguida, importamos a classe cURL do módulo PycURL
from pycurl import Curl
Depois de importar PycURL, importamos BytesIO de io. Vamos precisar disso para criar um buffer para escrever a resposta de PycURL.
from io import BytesIO
Em seguida, instanciamos uma nova instância de Curl.
c = Curl()
Em seguida, instanciamos BytesIO para criar um novo buffer. PycURL não possui um mecanismo de armazenamento integrado para armazenar respostas. Portanto, temos que criar um buffer e dizer a ele onde gravar os dados.
buffer = BytesIO()
Com o buffer criado, podemos definir opções em nosso objeto cliente. Neste caso, queremos definir duas opções; o primeiro é o URL que solicitamos. A segunda é onde queremos escrever o corpo da resposta. Aqui está o código para fazê-lo:
c.setopt(c.URL, 'http://pycurl.io/') c.setopt(c.WRITEDATA, buffer)
Depois de fazer isso, podemos solicitar chamando o método perform do objeto cliente e, em seguida, fechar a solicitação chamando o método close.
c.perform() c.close()
Para obter a resposta, chamamos o método getvalue() do objeto buffer e o decodificamos. Podemos então imprimi-lo no console.
body = buffer.getvalue() print(body.decode('iso-8859-1'))
Seu arquivo deve ficar assim:
from pycurl import Curl from io import BytesIO # Create a pycUrl instance c = Curl() buffer = BytesIO() c.setopt(c.URL, 'http://pycurl.io/') c.setopt(c.WRITEDATA, buffer) # Make the request c.perform() # Close the connection c.close() body = buffer.getvalue() print(body.decode('iso-8859-1'))
Depois de executar o script, você deve obter a seguinte saída:
Fazendo uma solicitação POST
Para fazer uma solicitação POST, você precisará definir as opções POSTFIELDS do objeto cliente cURL. Por exemplo, aqui está uma solicitação fazendo uma solicitação POST para a API JSON Placeholder.
from io import BytesIO from json import dumps from pycurl import Curl # Create a pycUrl instance c = Curl() buffer = BytesIO() # Create a data dictionary data = { 'userId': 1, 'title': 'Lorem Ipsum', 'body': 'Dolor sit amet' } # Encode the data to json encoded_data = dumps(data) # Set request options c.setopt(c.URL, 'https://jsonplaceholder.typicode.com/posts') c.setopt(c.HTTPHEADER, ['Accept: application/json', 'Content-Type: application/json']) c.setopt(c.POSTFIELDS, encoded_data) c.setopt(c.WRITEDATA, buffer) # Make the request c.perform() # Close the connection c.close() body = buffer.getvalue() print(body.decode('iso-8859-1'))
No código acima, criei um objeto dicionário com os dados que estarei enviando como parte da requisição. Em seguida, codifiquei os dados para JSON e os enviei anexados como carga útil à solicitação, definindo a opção POSTFIELDS para os dados codificados. Também especifiquei cabeçalhos para especificar o tipo de conteúdo da solicitação e o tipo de dados de resposta aceitos. Ao executar o código, você deve obter uma resposta como esta.
Escrevendo respostas para arquivos
Você também pode passar um buffer de arquivo para a opção cURL WRITEDATA. Isso gravará os dados de resposta no arquivo. O exemplo a seguir ilustra o conceito:
from pycurl import Curl file_name="output.json" # Opening the file in write mode with open(file_name, 'wb') as f: # Creating a Curl instance c = Curl() # Set request options c.setopt(c.URL, 'https://jsonplaceholder.typicode.com/users/1') c.setopt(c.HTTPHEADER, ['Accept: application/json']) c.setopt(c.WRITEDATA, f) # Make the request c.perform() # Close the connection c.close() print(f'Wrote output to {file_name}')
Alternativas para PycURL
PycURL fornece apenas uma camada fina sobre a biblioteca cURL. Isso o torna altamente personalizável, pois você tem mais controle sobre os recursos de nível inferior.
No entanto, torna mais difícil de usar e, portanto, é mais direcionado para o desenvolvedor avançado. Muitas vezes, você pode querer uma alternativa mais simples ao PycURL. Nesta seção, discutiremos as alternativas.
#1. Outras bibliotecas
Além do PycURL, o Python possui outras bibliotecas que podem ser usadas para fazer solicitações. Isso inclui a biblioteca de solicitações e a biblioteca urllib. Ambos são alternativas populares de anúncios mais fáceis para pycURL.
#2. Outras línguas
cURL possui interfaces implementadas em outras linguagens. Um site popular para converter sites cURL é o Curl Converter. Com o conversor cURL, você escreve um comando cURL para a solicitação que deseja fazer e ele converte automaticamente seu comando para qualquer linguagem de programação escolhida. Você também pode simplesmente chamar o comando cURL diretamente no seu terminal ou escrever um script Bash.
Conclusão
Neste artigo, apresentei o cURL e expliquei como usá-lo em Python usando o módulo PycURL. Também discutimos alternativas para PycURL, como o módulo de solicitações e o uso de linguagens diferentes para seus programas.
A seguir, confira o uso do comando cURL com exemplos em tempo real.