Curl este un utilitar de linie de comandă folosit ca client HTTP. Este popular pentru a face cereri HTTP din linia de comandă. cURL poate fi folosit pentru a scrie scripturi pentru web scraping, pentru a verifica starea de sănătate a site-ului și pentru a descărca fișiere din linia de comandă.
Este incredibil de simplu și poate fi folosit în multe limbaje de programare. Acest articol vă ghidează ce este cURL și cum să îl utilizați în Python.
Cuprins
Ce este cURL?
Conform site-ului web, cURL înseamnă „client URL”. Este un instrument de linie de comandă și o bibliotecă pentru transferul de date folosind diferite protocoale de rețea la nivel de aplicație, cum ar fi HTTP, HTTPS, FTP și IMAP.
Este incredibil de popular și folosit în peste 10 miliarde de instalații pe dispozitive precum radiouri, televizoare, routere, imprimante și computere. cURL este complet gratuit și open-source. Codul său sursă este disponibil pe GitHub.
cURL cazuri de utilizare
cURL este foarte util și versatil. Mai jos sunt enumerate cele mai populare cazuri de utilizare pentru cURL. Deși lista nu este exhaustivă, următoarele sunt doar câteva dintre cele mai populare cazuri:
- Testarea API-urilor: poate verifica dacă API-ul funcționează corect, returnând datele corecte pentru o anumită solicitare. În plus, poate fi folosit și pentru a verifica viteza API-ului, adică cât de repede răspunde la solicitări. Puteți scrie un script pentru a verifica periodic starea API-ului și pentru a trimite alerte când ceva nu merge bine.
- Web Scraping: De asemenea, poate extrage automat date de pe site-uri web. cURL poate fi folosit împreună cu multe limbaje de programare și ca o comandă Bash. Cu cURL, puteți prelua datele de pe site-uri web în mod dinamic. Din HTML de răspuns, puteți analiza și extrage datele de care aveți nevoie. Dacă sunteți interesat de web scraping, este posibil să doriți să verificați API-ul tipstrick.ro Web Scraping, care facilitează scrapingul datelor.
- Descărcarea datelor: cu cURL, puteți salva răspunsul la solicitări într-un fișier. Aceste răspunsuri pot fi date de la solicitări API sau fișiere de pe un server. În mod efectiv, prin scrierea răspunsului la un fișier, ați descărcat fișierul. Deoarece cURL este un instrument de linie de comandă, puteți automatiza acest proces pentru a descărca o mulțime de fișiere simultan.
Cum se utilizează cURL în Python (PycURL)
Se instalează PycURL
Pentru a folosi cURL în Python, folosim biblioteca PycURL. PycURL este o interfață Python pentru biblioteca cURL. Acesta creează un înveliș subțire peste biblioteca deja rapidă cURL. Acest lucru face ca PycURL să fie mai rapid decât alte biblioteci pentru a face solicitări, cum ar fi urllib și solicitări. Pentru a utiliza PycURL, mai întâi trebuie să îl instalați. Există instrucțiuni detaliate aici, dar o modalitate ușoară de a-l instala este utilizarea pip.
pip install PycURL
Pe Ubuntu 22.04, a trebuit să instalez instrumente suplimentare înainte de a instala PycURL. Utilizați această comandă înainte de a încerca să instalați PycURL cu pip:
sudo apt install libcurl4-openssl-dev libssl-dev
Efectuarea unei cereri GET simplă
Pentru a face o solicitare, începeți prin a crea un script Python în care să scrieți codul. Deschideți fișierul cu un editor de text. Voi folosi Vim, dar puteți folosi orice doriți. Pentru a deschide fișierul cu Vim, utilizați comanda de mai jos:
vim pycurl.py
Aici, pycurl.py este numele fișierului în care voi scrie codul, dar puteți denumi fișierul dvs. orice.
Apoi, importăm clasa cURL din modulul PycURL
from pycurl import Curl
După importul PycURL, importăm BytesIO din io. Vom avea nevoie de acest lucru pentru a crea un buffer pentru a scrie răspunsul lui PycURL.
from io import BytesIO
Apoi instanțiem o nouă instanță Curl.
c = Curl()
Apoi, instanțiem BytesIO pentru a crea un nou buffer. PycURL nu are un mecanism de stocare încorporat pentru a stoca răspunsurile. Deci trebuie să creăm un buffer și să-i spunem unde să scrie datele.
buffer = BytesIO()
Cu tamponul creat, putem seta opțiuni pentru obiectul nostru client. În acest caz, dorim să setăm două opțiuni; primul este adresa URL pe care o solicităm. Al doilea este locul unde vrem să scriem corpul răspunsului. Iată codul pentru a face acest lucru:
c.setopt(c.URL, 'http://pycurl.io/') c.setopt(c.WRITEDATA, buffer)
Odată ce facem acest lucru, putem solicita apelând metoda perform a obiectului client și apoi închidem cererea apelând metoda close.
c.perform() c.close()
Pentru a obține răspunsul, apelăm metoda getvalue() a obiectului tampon și o decodăm. Apoi îl putem imprima pe consolă.
body = buffer.getvalue() print(body.decode('iso-8859-1'))
Fișierul dvs. ar trebui să arate astfel:
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'))
După executarea scriptului, ar trebui să obțineți următoarea ieșire:
Efectuarea unei cereri POST
Pentru a face o cerere POST, va trebui să setați opțiunile POSTFIELDS ale obiectului client cURL. De exemplu, iată o solicitare care face o solicitare POST către API-ul 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'))
În codul de mai sus, am creat un obiect dicționar cu datele pe care le voi trimite ca parte a solicitării. Apoi, am codificat datele în JSON și le-am trimis atașat ca sarcină utilă la cerere, setând opțiunea POSTFIELDS la datele codificate. Am specificat, de asemenea, antete pentru a specifica tipul de conținut al cererii și tipul de date de răspuns acceptat. Când rulați codul, ar trebui să primiți un răspuns ca acesta.
Scrierea răspunsurilor la fișiere
De asemenea, puteți trece un buffer de fișier către opțiunea cURL WRITEDATA. Aceasta va scrie datele răspunsului în fișier. Următorul exemplu ilustrează conceptul:
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}')
Alternative la PycURL
PycURL oferă doar un strat subțire peste biblioteca cURL. Acest lucru îl face extrem de personalizabil, deoarece aveți mai mult control asupra funcțiilor de nivel inferior.
Cu toate acestea, este mai greu de utilizat și, prin urmare, este mai orientat către dezvoltatorii avansati. De multe ori, este posibil să doriți o alternativă mai simplă la PycURL. În această secțiune, vom discuta alternativele.
#1. Alte biblioteci
În afară de PycURL, Python are și alte biblioteci care pot fi folosite pentru a face cereri. Acestea includ biblioteca de solicitări și biblioteca urllib. Ambele sunt alternative populare și mai ușoare la pycURL.
#2. Alte limbi
cURL are interfețe implementate în alte limbi. Un site popular pentru conversia site-urilor cURL este Curl Converter. Cu cURL Converter, scrieți o comandă cURL pentru solicitarea pe care doriți să o faceți și vă convertește automat comanda în orice limbaj de programare ales. Puteți, de asemenea, să apelați comanda cURL direct în terminalul dvs. sau să scrieți un script Bash.
Concluzie
În acest articol, am introdus cURL și am explicat cum să-l folosești în Python folosind modulul PycURL. Am discutat, de asemenea, despre alternative la PycURL, cum ar fi modulul de solicitări și utilizarea diferitelor limbi pentru programele dvs.
Apoi, verificați utilizarea comenzii cURL cu exemple în timp real.