Hogyan kell használni a Python cURL-t?

A Curl egy HTTP-kliensként használt parancssori segédprogram. Népszerű a parancssorból történő HTTP-kéréseknél. A cURL segítségével szkripteket írhatunk webkaparáshoz, ellenőrizhetjük a webhely állapotát, és fájlokat tölthetünk le a parancssorból.

Hihetetlenül egyszerű, és számos programozási nyelven használható. Ez a cikk bemutatja, hogy mi a cURL, és hogyan kell használni a Pythonban.

Mi az a cURL?

A webhely szerint a cURL a „kliens URL-t” jelenti. Ez egy parancssori eszköz és egy könyvtár adatátvitelhez különböző alkalmazási szintű hálózati protokollok, például HTTP, HTTPS, FTP és IMAP használatával.

Hihetetlenül népszerű, és több mint 10 milliárd telepítésben használják olyan eszközökön, mint a rádiók, tévék, útválasztók, nyomtatók és számítógépek. A cURL teljesen ingyenes és nyílt forráskódú. Forráskódja elérhető a GitHubon.

cURL használati esetek

A cURL nagyon hasznos és sokoldalú. Az alábbiakban felsoroljuk a cURL legnépszerűbb használati eseteit. Bár a lista nem teljes, az alábbiak csak néhány a legnépszerűbb esetek közül:

  • API-k tesztelése: Ellenőrizheti, hogy az API megfelelően működik-e, és a megfelelő adatokat adja vissza egy adott kéréshez. Ezen kívül az API sebessége is ellenőrizhető, vagyis hogy milyen gyorsan válaszol a kérésekre. Írhat egy parancsfájlt az API állapotának időszakonkénti ellenőrzésére, és figyelmeztetéseket küldhet, ha valami hiba történik.
  • Webkaparás: Automatikusan kinyerheti az adatokat a webhelyekről. A cURL számos programozási nyelvvel együtt használható, és Bash parancsként is használható. A cURL segítségével dinamikusan kérhet le adatokat a webhelyekről. A válasz HTML-kódjából elemezheti és kibonthatja a szükséges adatokat. Ha érdekli a webkaparás, érdemes lehet megnézni a etoppc.com Web Scraping API-t, amely megkönnyíti az adatok lekaparását.
  • Adatok letöltése: A cURL segítségével a kérések válaszait fájlba mentheti. Ezek a válaszok lehetnek API-kérésekből származó adatok vagy egy szerverről származó fájlok. Valójában a válasz fájlba írásával letöltötte a fájlt. Mivel a cURL egy parancssori eszköz, automatizálhatja ezt a folyamatot, hogy egyszerre sok fájlt töltsön le.
  A Chrome rejtett „Lap küldése önmagának” funkciójának használata

A cURL használata Pythonban (PycURL)

PycURL telepítése

A cURL Pythonban való használatához a PycURL könyvtárat használjuk. A PycURL egy Python felület a cURL könyvtárhoz. Vékony burkolóanyagot hoz létre az amúgy is gyors cURL-könyvtár felett. Ez gyorsabbá teszi a PycURL-t, mint más könyvtárak kérések, például urllib és kérések végrehajtásához. A PycURL használatához először telepítenie kell azt. Itt találhatók részletes utasítások, de a telepítés egyszerű módja a pip használatával.

pip install PycURL

Az Ubuntu 22.04-en további eszközöket kellett telepítenem a PycURL telepítése előtt. Használja ezt a parancsot, mielőtt megpróbálná telepíteni a PycURL-t pip-vel:

sudo apt install libcurl4-openssl-dev libssl-dev

Egyszerű GET-kérés elkészítése

Kéréshez hozzon létre egy Python-szkriptet a kód beírásához. Nyissa meg a fájlt egy szövegszerkesztővel. Én a Vim-et fogom használni, de bármelyiket használhatod. A fájl Vim programmal való megnyitásához használja az alábbi parancsot:

vim pycurl.py

Itt a pycurl.py annak a fájlnak a neve, amelybe a kódomat fogom írni, de a fájlnak bármit elnevezhet.

Ezután importáljuk a cURL osztályt a PycURL modulból

from pycurl import Curl

A PycURL importálása után a BytesIO-t importáljuk az io-ból. Erre azért lesz szükségünk, hogy puffert hozzunk létre a PycURL válaszának írásához.

from io import BytesIO

Ezután egy új Curl példányt készítünk.

c = Curl()

Ezután példányosítjuk a BytesIO-t egy új puffer létrehozásához. A PycURL nem rendelkezik beépített tárolási mechanizmussal a válaszok tárolására. Tehát létre kell hoznunk egy puffert, és meg kell adni neki, hogy hova írja az adatokat.

buffer = BytesIO()

A létrehozott pufferrel opciókat állíthatunk be a kliens objektumunkon. Ebben az esetben két lehetőséget szeretnénk beállítani; az első az általunk kért URL. A második az, ahová a válasz törzsét akarjuk írni. Itt van a kód, amivel megteheti:

c.setopt(c.URL, 'http://pycurl.io/')
c.setopt(c.WRITEDATA, buffer)

Miután ezt megtettük, kérhetünk a kliens objektum perform metódusának meghívásával, majd lezárhatjuk a kérést a close metódus meghívásával.

c.perform()
c.close()

A válasz megszerzéséhez meghívjuk a bufferobjektum getvalue() metódusát, és dekódoljuk. Ezután kinyomtathatjuk a konzolra.

body = buffer.getvalue()
print(body.decode('iso-8859-1'))

A fájlnak így kell kinéznie:

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'))

A szkript végrehajtása után a következő kimenetet kell kapnia:

  Hogyan telepítsem a Linuxot

POST-kérés elkészítése

POST kérés indításához be kell állítania a cURL ügyfélobjektum POSTFIELDS beállításait. Például itt van egy kérés, amely POST kérést küld a JSON helyőrző API-hoz.

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'))

A fenti kódban létrehoztam egy szótárobjektumot azokkal az adatokkal, amelyeket a kérés részeként küldök. Ezután az adatokat JSON-ba kódoltam, és a POSTFIELDS opciót a kódolt adatokra állítva küldtem el a kérelemhez csatolva hasznos adatként. Fejléceket is megadtam a kérés tartalomtípusának és az elfogadott válasz adattípusának megadásához. A kód futtatásakor ehhez hasonló választ kell kapnia.

  Üzenetek elküldésének visszavonása iPhone, iPad és Mac rendszeren

Válaszok írása fájlokra

Fájlpuffert is átadhat a cURL WRITEDATA opciónak. Ez beírja a válaszadatokat a fájlba. A következő példa szemlélteti a koncepciót:

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}')

A PycURL alternatívái

A PycURL csak egy vékony réteget biztosít a cURL könyvtár felett. Ez nagymértékben személyre szabhatóvá teszi, mivel jobban irányíthatja az alacsonyabb szintű funkciókat.

Azonban megnehezíti a használatát, és ezért inkább a haladó fejlesztőket célozza meg. Gyakran előfordulhat, hogy a PycURL egyszerűbb alternatíváját kívánja meg. Ebben a részben az alternatívákat tárgyaljuk.

#1. Egyéb könyvtárak

A PycURL-en kívül a Pythonnak vannak más könyvtárai is, amelyek használhatók kérések benyújtására. Ezek közé tartozik a kérések könyvtár és az urllib könyvtár. Mindkettő népszerű hirdetéskönnyebb alternatívája a pycURL-nek.

#2. Más nyelvek

A cURL más nyelveken implementált felületekkel rendelkezik. A cURL-webhelyek konvertálására szolgáló népszerű webhely a Curl Converter. A cURL Converter segítségével egy cURL parancsot írhat a kéréshez, amely automatikusan konvertálja a parancsot bármely kiválasztott programozási nyelvre. Meghívhatja a cURL parancsot közvetlenül a terminálban, vagy írhat egy Bash-szkriptet.

Következtetés

Ebben a cikkben bemutattam a cURL-t, és elmagyaráztam, hogyan kell használni a Pythonban a PycURL modul segítségével. Megvitattuk a PycURL alternatíváit is, például a kérések modult és a különböző nyelvek használatát a programokhoz.

Ezután nézze meg a cURL parancshasználatot valós idejű példákkal.