Овај пост говори о две методе захтева ХТТП (Хипертект Трансфер Протоцол) ГЕТ и ПОСТ захтева у Питхон-у и њиховој примени у Питхон-у.
Шта је ХТТП?
ХТТП је скуп протокола дизајнираних да омогуће комуникацију између клијената и сервера. Ради као протокол захтев-одговор између клијента и сервера. Веб претраживач може бити клијент, а апликација на рачунару који хостује веб локацију може бити сервер. Дакле, да бисте затражили одговор од сервера, углавном постоје два начина:
- ГЕТ : За тражење података са сервера.
- ПОСТ : За слање података за обраду на сервер.
Ево једноставног дијаграма који објашњава основни концепт ГЕТ и ПОСТ метода.
Сада да направите ХТТП захтеве Питхон можемо користити неколико ХТТП библиотека као што су:
Најелегантнија и најједноставнија од горе наведених библиотека је Захтеви. Користићемо библиотеку захтева у овом чланку. Да бисте преузели и инсталирали библиотеку захтева користите следећу команду:
pip install requestsИзрада захтева за Гет
Горњи пример проналази географску ширину и дужину и форматирану адресу дате локације слањем ГЕТ захтева АПИ-ју Гоогле мапа. Ан АПИ (Апликацијски програмски интерфејс) вам омогућава да приступите унутрашњим карактеристикама програма на ограничен начин. И у већини случајева наведени подаци су у ЈСОН (ЈаваСцрипт нотација објекта) формату (који је имплементиран као објекти речника у Питхон-у!).
Python# importing the requests library import requests # api-endpoint URL = 'http://maps.googleapis.com/maps/api/geocode/json' # location given here location = 'delhi technological university' # defining a params dict for the parameters to be sent to the API PARAMS = {'address':location} # sending get request and saving the response as response object r = requests.get(url = URL params = PARAMS) # extracting data in json format data = r.json() # extracting latitude longitude and formatted address # of the first matching location latitude = data['results'][0]['geometry']['location']['lat'] longitude = data['results'][0]['geometry']['location']['lng'] formatted_address = data['results'][0]['formatted_address'] # printing the output print('Latitude:%snLongitude:%snFormatted Address:%s' %(latitude longitudeformatted_address))
Излаз:
Важне тачке за закључити:
PARAMS = {'address':location}УРЛ за ГЕТ захтев углавном носи неке параметре са собом. Параметри библиотеке захтева се могу дефинисати као речник. Ови параметри се касније рашчлањују и додају основном УРЛ-у или крајњој тачки АПИ-ја. Да бисте разумели улогу параметра, покушајте да одштампате р.урл након креирања објекта одговора. Видећете нешто овако:
http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+universityОво је стварна УРЛ адреса на којој је направљен ГЕТ захтев
r = requests.get(url = URL params = PARAMS)Овде креирамо објекат одговора 'р' који ће чувати захтев-одговор. Користимо рекуестс.гет() метод пошто шаљемо ГЕТ захтев. Два аргумента која прослеђујемо су УРЛ и речник параметара.
data = r.json()Сада да бисмо преузели податке из објекта одговора, морамо да конвертујемо сирови садржај одговора у структуру података типа ЈСОН. Ово се постиже коришћењем методе јсон(). На крају издвајамо потребне информације рашчлањивањем објекта типа ЈСОН.
Прављење ПОСТ захтева
Овај пример објашњава како да налепите свој изворни код да пастебин.цом слањем ПОСТ захтева на ПАСТЕБИН АПИ. Пре свега, мораћете да генеришете АПИ кључ од пријављивање овде а затим приступити вашем АПИ кључ овде.
Python# importing the requests library import requests # defining the api-endpoint API_ENDPOINT = 'https://pastebin.com/api/api_post.php' # your API key here API_KEY = 'XXXXXXXXXXXXXXXXX' # your source code here source_code = ''' print('Hello world!') a = 1 b = 2 print(a + b) ''' # data to be sent to api data = {'api_dev_key': API_KEY 'api_option': 'paste' 'api_paste_code': source_code 'api_paste_format': 'python'} # sending post request and saving response as response object r = requests.post(url=API_ENDPOINT data=data) # extracting response text pastebin_url = r.text print('The pastebin URL is:%s' % pastebin_url)
Важне карактеристике овог кода:
data = {'api_dev_key':API_KEY
'api_option':'paste'
'api_paste_code':source_code
'api_paste_format':'python'}
Овде ћемо поново морати да проследимо неке податке АПИ серверу. Ове податке чувамо као речник.
r = requests.post(url = API_ENDPOINT data = data)Овде креирамо објекат одговора 'р' који ће чувати захтев-одговор. Користимо рекуестс.пост() метод пошто шаљемо ПОСТ захтев. Два аргумента која прослеђујемо су УРЛ и речник података.
pastebin_url = r.textКао одговор, сервер обрађује податке који су му послати и шаље пастебин_УРЛ вашег изворни_код којима се једноставно може приступити р.текст.
захтеви.пост метода се може користити за многе друге задатке, као и за попуњавање и подношење веб образаца који се објављују на вашој ФБ временској линији користећи Фацебоок Грапх АПИ итд.
Ево неколико важних тачака о којима треба размислити:
- Када је метод ГЕТ, сви подаци обрасца се кодирају у УРЛ и додају у акција УРЛ као параметри стринга упита. Са ПОСТ обрасцем подаци се појављују унутар тело поруке ХТТП захтева.
- У методи ГЕТ подаци о параметрима су ограничени на оно што можемо да унесемо у ред захтева (УРЛ). Најсигурније је користити мање од 2К параметара неки сервери обрађују и до 64К. Нема таквог проблема у ПОСТ методи јер шаљемо податке у тело поруке ХТТП захтева не УРЛ.
- Само АСЦИИ знакови су дозвољени за слање података методом ГЕТ. У ПОСТ методи нема таквог ограничења.
- ГЕТ је мање безбедан у поређењу са ПОСТ-ом јер су послати подаци део УРЛ-а. Дакле, метод ГЕТ не би требало да се користи приликом слања лозинки или других осетљивих информација.