Как да използвам 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 отговора можете да анализирате и извличате данните, от които се нуждаете. Ако се интересувате от уеб скрапинг, може да искате да проверите pctechbg.net Web Scraping API, който улеснява скрапирането на данни.
  • Изтегляне на данни: С cURL можете да запазите отговора на заявките във файл. Тези отговори могат да бъдат данни от API заявки или файлове от сървър. Ефективно, като напишете отговора във файл, вие сте изтеглили файла. Тъй като cURL е инструмент за команден ред, можете да автоматизирате този процес, за да изтеглите много файлове наведнъж.
  Вероятно няма да получите $25 от споразумението за ограничаване на iPhone на Apple

Как да използвате 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'))

След като изпълните скрипта, трябва да получите следния резултат:

  Как да възстановите фабричните настройки на вашия Chromebook

Правене на 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 на кодираните данни. Също така посочих заглавки, за да уточня типа на съдържанието на заявката и типа данни на приетия отговор. Когато стартирате кода, трябва да получите отговор като този.

  Приложение за водене на бележки, базирано на жестове, с текст, снимка, гласова бележка и напомняне

Писане на отговори на файлове

Можете също така да подадете файлов буфер към опцията 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 с примери в реално време.