Цурл је услужни програм командне линије који се користи као ХТТП клијент. Популарно је за прављење ХТТП захтева из командне линије. цУРЛ се може користити за писање скрипти за веб сцрапинг, проверу здравља сајта и преузимање датотека са командне линије.
Невероватно је једноставан и може се користити у многим програмским језицима. Овај чланак води шта је цУРЛ и како га користити у Питхон-у.
Преглед садржаја
Шта је цУРЛ?
Према веб локацији, цУРЛ значи „УРЛ клијента“. То је алатка командне линије и библиотека за пренос података помоћу различитих мрежних протокола на нивоу апликације као што су ХТТП, ХТТПС, ФТП и ИМАП.
Невероватно је популаран и користи се у преко 10 милијарди инсталација на различитим уређајима као што су радији, телевизори, рутери, штампачи и рачунари. цУРЛ је потпуно бесплатан и отвореног кода. Његов изворни код је доступан на ГитХуб-у.
цУРЛ случајеви употребе
цУРЛ је веома користан и свестран. У наставку су наведени најпопуларнији случајеви употребе цУРЛ-а. Иако листа није коначна, у наставку су само неки од најпопуларнијих случајева:
- Тестирање АПИ-ја: Може да провери да ли АПИ функционише исправно, враћајући тачне податке за дати захтев. Поред тога, може се користити и за проверу брзине АПИ-ја, односно колико брзо одговара на захтеве. Можете написати скрипту да периодично проверавате здравље АПИ-ја и шаљете упозорења када нешто крене наопако.
- Веб Сцрапинг: Такође може аутоматски извући податке са веб локација. цУРЛ се може користити у комбинацији са многим програмским језицима и као Басх команда. Помоћу цУРЛ-а можете динамички преузимати податке са веб локација. Из ХТМЛ-а одговора можете рашчланити и издвојити податке који су вам потребни. Ако сте заинтересовани за веб сцрапинг, можда бисте желели да погледате вдзвдз АПИ за стругање веба који олакшава скенирање података.
- Преузимање података: Помоћу цУРЛ-а можете сачувати одговор на захтеве у датотеку. Ови одговори могу бити подаци из АПИ захтева или фајлови са сервера. У ствари, писањем одговора на датотеку, преузели сте датотеку. Пошто је цУРЛ алатка командне линије, можете аутоматизовати овај процес да преузмете много датотека одједном.
Како користити цУРЛ у Питхон-у (ПицУРЛ)
Инсталирање ПицУРЛ-а
Да бисмо користили цУРЛ у Питхон-у, користимо библиотеку ПицУРЛ. ПицУРЛ је Питхон интерфејс за цУРЛ библиотеку. Он ствара танак омотач преко већ брзе цУРЛ библиотеке. Ово чини ПицУРЛ бржим од других библиотека за прављење захтева као што су урллиб и захтеви. Да бисте користили ПицУРЛ, прво га морате инсталирати. Овде постоје детаљна упутства, али једноставан начин да га инсталирате је коришћење пип-а.
pip install PycURL
На Убунту 22.04, морао сам да инсталирам додатне алате пре инсталирања ПицУРЛ-а. Користите ову команду пре него што покушате да инсталирате ПицУРЛ са пип:
sudo apt install libcurl4-openssl-dev libssl-dev
Израда једноставног ГЕТ захтева
Да бисте упутили захтев, почните тако што ћете креирати Питхон скрипту за писање кода. Отворите датотеку помоћу уређивача текста. Користићу Вим, али ви можете користити било који желите. Да бисте отворили датотеку помоћу Вим-а, користите наредбу дату у наставку:
vim pycurl.py
Овде, пицурл.пи је име датотеке у коју ћу да упишем свој код, али своју датотеку можете именовати било шта.
Затим увозимо класу цУРЛ из модула ПицУРЛ
from pycurl import Curl
Након увоза ПицУРЛ-а, увозимо БитесИО из ио. Ово ће нам требати да креирамо бафер за писање одговора ПицУРЛ-а.
from io import BytesIO
Затим инстанцирамо нову инстанцу Цурл-а.
c = Curl()
Затим инстанцирамо БитесИО да креирамо нови бафер. ПицУРЛ нема уграђени механизам за складиштење одговора. Дакле, морамо да креирамо бафер и да му кажемо где да упише податке.
buffer = BytesIO()
Са креираним бафером, можемо поставити опције на наш клијентски објекат. У овом случају желимо да поставимо две опције; први је УРЛ који захтевамо. Друго је место где желимо да напишемо тело одговора. Ево кода за то:
c.setopt(c.URL, 'http://pycurl.io/') c.setopt(c.WRITEDATA, buffer)
Када то урадимо, можемо захтевати позивањем методе перформ клијентског објекта, а затим затворити захтев позивањем методе цлосе.
c.perform() c.close()
Да бисмо добили одговор, позивамо метод гетвалуе() објекта бафера и декодирамо га. Затим га можемо одштампати на конзоли.
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'))
Након извршавања скрипте, требало би да добијете следећи излаз:
Израда ПОСТ захтева
Да бисте направили ПОСТ захтев, мораћете да подесите ПОСТФИЕЛДС опције за цУРЛ клијентски објекат. На пример, ево захтева који шаље ПОСТ захтев за ЈСОН Плацехолдер АПИ.
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'))
У коду изнад, направио сам објекат речника са подацима које ћу послати као део захтева. Затим сам кодирао податке у ЈСОН и послао их у прилогу као корисни терет захтеву тако што сам поставио опцију ПОСТФИЕЛДС на кодиране податке. Такође сам навео заглавља да одредим тип садржаја захтева и прихваћени тип података одговора. Када покренете код, требало би да добијете овакав одговор.
Писање одговора на датотеке
Такође можете проследити бафер датотеке у опцију цУРЛ ВРИТЕДАТА. Ово ће уписати податке одговора у датотеку. Следећи пример илуструје концепт:
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}')
Алтернативе за ПицУРЛ
ПицУРЛ пружа само танак слој преко цУРЛ библиотеке. Ово га чини веома прилагодљивим јер имате већу контролу над функцијама нижег нивоа.
Међутим, то отежава употребу и стога је више усмерено на напредне програмере. Често ћете можда желети једноставнију алтернативу за ПицУРЛ. У овом одељку ћемо разговарати о алтернативама.
#1. Друге библиотеке
Осим ПицУРЛ-а, Питхон има и друге библиотеке које се могу користити за прављење захтева. Ово укључује библиотеку захтева и урллиб библиотеку. Обе су популарне и лакше алтернативе за пицУРЛ.
#2. Други језици
цУРЛ има интерфејсе имплементиране на другим језицима. Популарна веб локација за конвертовање цУРЛ веб локација је Цурл Цонвертер. Са цУРЛ Цонвертером пишете цУРЛ команду за захтев који желите да направите, а он аутоматски конвертује вашу команду у било који изабрани програмски језик. Такође можете једноставно позвати команду цУРЛ директно у свом терминалу или написати Басх скрипту.
Закључак
У овом чланку сам представио цУРЛ и објаснио како га користити у Питхон-у користећи ПицУРЛ модул. Такође смо разговарали о алтернативама ПицУРЛ-у, као што је модул захтева и потпуно коришћење различитих језика за ваше програме.
Затим погледајте употребу команде цУРЛ са примерима у реалном времену.