Як використовувати Python cURL?

Curl — це утиліта командного рядка, яка використовується як HTTP-клієнт. Він популярний для виконання HTTP-запитів із командного рядка. cURL можна використовувати для написання сценаріїв для веб-збирання, перевірки працездатності сайту та завантаження файлів із командного рядка.

Він неймовірно простий і може використовуватися багатьма мовами програмування. Ця стаття пояснює, що таке cURL і як його використовувати в Python.

Що таке cURL?

Згідно з веб-сайтом, cURL розшифровується як «URL-адреса клієнта». Це інструмент командного рядка та бібліотека для передачі даних за допомогою різних мережевих протоколів прикладного рівня, таких як HTTP, HTTPS, FTP та IMAP.

Він неймовірно популярний і використовується в понад 10 мільярдах установок на таких пристроях, як радіо, телевізори, маршрутизатори, принтери та комп’ютери. cURL є абсолютно безкоштовним і має відкритий код. Його вихідний код доступний на GitHub.

Випадки використання cURL

cURL дуже корисний і універсальний. Нижче наведено найпопулярніші варіанти використання cURL. Хоча список не є вичерпним, нижче наведено лише деякі з найпопулярніших випадків:

  • Тестування API: він може перевіряти, чи правильно працює API, повертаючи правильні дані для певного запиту. Крім того, його також можна використовувати для перевірки швидкості API, тобто того, наскільки швидко він відповідає на запити. Ви можете написати сценарій, щоб періодично перевіряти працездатність API та надсилати сповіщення, коли щось піде не так.
  • Web Scraping: він також може автоматично отримувати дані з веб-сайтів. cURL можна використовувати в поєднанні з багатьма мовами програмування та як команду Bash. За допомогою cURL ви можете динамічно отримувати дані з веб-сайтів. З HTML відповіді ви можете аналізувати та витягувати потрібні дані. Якщо ви зацікавлені в веб-збиранні, ви можете перевірити techukraine.net Web Scraping API, який спрощує збирати дані.
  • Завантаження даних: за допомогою cURL ви можете зберігати відповіді на запити у файлі. Ці відповіді можуть бути даними із запитів API або файлами з сервера. По суті, написавши відповідь у файл, ви завантажили файл. Оскільки cURL є інструментом командного рядка, ви можете автоматизувати цей процес, щоб завантажувати багато файлів одночасно.
  Чому мій Paramount Plus не працює на моєму телевізорі?

Як використовувати cURL у Python (PycURL)

Встановлення PycURL

Щоб використовувати cURL у Python, ми використовуємо бібліотеку PycURL. PycURL — це інтерфейс Python для бібліотеки cURL. Він створює тонку оболонку над уже швидкою бібліотекою cURL. Це робить PycURL швидшим за інші бібліотеки для створення запитів, таких як urllib і запити. Щоб використовувати PycURL, його спочатку потрібно встановити. Тут є докладні інструкції, але простий спосіб встановити це за допомогою pip.

pip install PycURL

У Ubuntu 22.04 мені довелося встановити додаткові інструменти перед встановленням PycURL. Скористайтеся цією командою, перш ніж намагатися встановити PycURL за допомогою pip:

sudo apt install libcurl4-openssl-dev libssl-dev

Створення простого запиту GET

Щоб зробити запит, почніть зі створення сценарію Python, щоб написати код. Відкрийте файл за допомогою текстового редактора. Я збираюся використовувати Vim, але ви можете використовувати будь-який, який вам подобається. Щоб відкрити файл за допомогою Vim, скористайтеся наведеною нижче командою:

vim pycurl.py

Тут pycurl.py — це ім’я файлу, у який я буду писати свій код, але ви можете назвати файл як завгодно.

Далі ми імпортуємо клас cURL з модуля PycURL

from pycurl import Curl

Після імпорту PycURL ми імпортуємо BytesIO з io. Це нам знадобиться, щоб створити буфер для запису відповіді PycURL.

from io import BytesIO

Потім ми створюємо новий екземпляр Curl.

c = Curl()

Далі ми створюємо екземпляр BytesIO, щоб створити новий буфер. PycURL не має вбудованого механізму зберігання відповідей. Отже, ми повинні створити буфер і вказати йому, куди записувати дані.

buffer = BytesIO()

Зі створеним буфером ми можемо встановити параметри для нашого клієнтського об’єкта. У цьому випадку ми хочемо встановити два параметри; перший – URL, який ми запитуємо. Друге місце, де ми хочемо написати тіло відповіді. Ось код для цього:

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

Зробивши це, ми можемо зробити запит, викликавши метод perform об’єкта клієнта, а потім закрити запит, викликавши метод close.

c.perform()
c.close()

Щоб отримати відповідь, ми викликаємо метод getvalue() об’єкта буфера та декодуємо його. Потім ми можемо роздрукувати його на консолі.

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

Ваш файл має виглядати так:

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

Після виконання сценарію ви повинні отримати наступний результат:

  Що таке Microsoft Teams і чи підходить він для мого бізнесу?

Створення POST-запиту

Щоб зробити запит POST, вам потрібно встановити параметри POSTFIELDS об’єкта клієнта cURL. Наприклад, ось запит, що робить запит POST до JSON Placeholder API.

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

У наведеному вище коді я створив об’єкт словника з даними, які я надсилаю як частину запиту. Далі я закодував дані в JSON і надіслав їх у вигляді корисного навантаження до запиту, встановивши параметр POSTFIELDS для закодованих даних. Я також вказав заголовки для визначення типу вмісту запиту та прийнятного типу даних відповіді. Коли ви запускаєте код, ви повинні отримати таку відповідь.

  13 найкращих платформ хостингу для ринку Великобританії та Європи

Написання відповідей на файли

Ви також можете передати файловий буфер параметру cURL WRITEDATA. Це запише дані відповіді у файл. Наступний приклад ілюструє концепцію:

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

Альтернативи PycURL

PycURL надає лише тонкий шар над бібліотекою cURL. Завдяки цьому його можна налаштувати, оскільки ви маєте більше контролю над функціями нижчого рівня.

Однак це ускладнює використання і, отже, більше орієнтоване на досвідчених розробників. Часто вам може знадобитися простіша альтернатива PycURL. У цьому розділі ми обговоримо альтернативи.

#1. Інші бібліотеки

Крім PycURL, Python має інші бібліотеки, які можна використовувати для створення запитів. До них входять бібліотека запитів і бібліотека urllib. Обидва вони є популярними альтернативами реклами pycURL.

#2. Інші мови

cURL має інтерфейси, реалізовані іншими мовами. Популярним веб-сайтом для конвертації веб-сайтів cURL є Curl Converter. За допомогою конвертера cURL ви пишете команду cURL для запиту, який хочете зробити, і він автоматично перетворює вашу команду на будь-яку вибрану мову програмування. Ви також можете просто викликати команду cURL безпосередньо у своєму терміналі або написати сценарій Bash.

Висновок

У цій статті я представив cURL і пояснив, як використовувати його в Python за допомогою модуля PycURL. Ми також обговорили альтернативи PycURL, такі як модуль запитів і використання різних мов для ваших програм.

Далі перевірте використання команди cURL із прикладами в реальному часі.