Tento príspevok pojednáva o dvoch metódach požiadaviek HTTP (Hypertext Transfer Protocol) Žiadosti GET a POST v Pythone a ich implementácii v Pythone.
Čo je HTTP?
HTTP je sada protokolov navrhnutých na umožnenie komunikácie medzi klientmi a servermi. Funguje ako protokol žiadosť-odpoveď medzi klientom a serverom. Klientom môže byť webový prehliadač a serverom môže byť aplikácia v počítači, ktorý je hostiteľom webovej stránky. Takže na vyžiadanie odpovede zo servera existujú hlavne dva spôsoby:
- GET : Na vyžiadanie údajov zo servera.
- POST : Na odoslanie údajov na spracovanie na server.
Tu je jednoduchý diagram, ktorý vysvetľuje základný koncept metód GET a POST.
Teraz vytvorte požiadavky HTTP Python môžeme použiť niekoľko HTTP knižníc ako:
Najelegantnejšou a najjednoduchšou z vyššie uvedených knižníc sú požiadavky. V tomto článku budeme používať knižnicu žiadostí. Na stiahnutie a inštaláciu knižnice požiadaviek použite nasledujúci príkaz:
pip install requestsPodanie žiadosti o získanie
Vyššie uvedený príklad nájde zemepisnú šírku, dĺžku a formátovanú adresu daného miesta odoslaním požiadavky GET do rozhrania Google Maps API. An API (Application Programming Interface) vám umožňuje obmedzený prístup k interným funkciám programu. A vo väčšine prípadov sú poskytnuté údaje v JSON (JavaScript Object Notation) formát (ktorý je implementovaný ako objekty slovníka v Pythone!).
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))
výstup:
Dôležité body, ktoré treba vyvodiť:
PARAMS = {'address':location}Adresa URL pre požiadavku GET vo všeobecnosti nesie so sebou niektoré parametre. Pre požiadavky môžu byť parametre knižnice definované ako slovník. Tieto parametre sa neskôr analyzujú a pridajú do základnej adresy URL alebo do koncového bodu rozhrania API. Aby ste pochopili úlohu parametra, skúste ho vytlačiť r.url po vytvorení objektu odpovede. Uvidíte niečo takéto:
http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+universityToto je skutočná adresa URL, na ktorej sa odošle požiadavka GET
r = requests.get(url = URL params = PARAMS)Tu vytvoríme objekt odpovede 'r', ktorý uloží žiadosť-odpoveď. Používame metódu request.get(), pretože posielame požiadavku GET. Dva argumenty, ktoré odovzdávame, sú URL a slovník parametrov.
data = r.json()Teraz, aby sme mohli získať údaje z objektu odpovede, musíme konvertovať nespracovaný obsah odpovede na dátovú štruktúru typu JSON. To sa dosiahne pomocou metódy json(). Nakoniec extrahujeme požadované informácie analýzou objektu typu JSON.
Podanie žiadosti POST
Tento príklad vysvetľuje, ako vložiť váš zdrojový_kód do pastebin.com odoslaním požiadavky POST do API PASTEBIN. Najprv budete musieť vygenerovať kľúč API registrácia tu a potom prístup k vášmu API kľúč tu.
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)
Dôležité vlastnosti tohto kódu:
data = {'api_dev_key':API_KEY
'api_option':'paste'
'api_paste_code':source_code
'api_paste_format':'python'}
Tu opäť budeme musieť odovzdať nejaké údaje na server API. Tieto údaje uchovávame ako slovník.
r = requests.post(url = API_ENDPOINT data = data)Tu vytvoríme objekt odpovede 'r', ktorý uloží žiadosť-odpoveď. Používame metódu request.post(), pretože posielame požiadavku POST. Dva argumenty, ktoré odovzdávame, sú URL a dátový slovník.
pastebin_url = r.textAko odpoveď server spracuje údaje, ktoré mu boli odoslané, a odošle váš pastebin_URL zdrojový_kód ku ktorým sa dá jednoducho pristupovať r.text.
žiadosti.post metóda sa dá použiť na mnoho ďalších úloh, ako aj na vypĺňanie a odosielanie webových formulárov na časovej osi FB pomocou rozhrania Facebook Graph API atď.
Tu je niekoľko dôležitých bodov na zamyslenie:
- Keď je metóda GET, všetky údaje formulára sa zakódujú do adresy URL a pridajú sa k nej akcie URL ako parametre reťazca dopytu. S formulárom POST sa údaje objavia v rámci telo správy HTTP požiadavky.
- V metóde GET sú údaje o parametroch obmedzené na to, čo môžeme vložiť do riadku požiadavky (URL). Najbezpečnejšie je použiť menej ako 2 000 parametrov, niektoré servery spracovávajú až 64 000 parametrov. Pri metóde POST takýto problém nie je, keďže údaje odosielame v telo správy HTTP požiadavky, nie URL.
- Na odosielanie údajov metódou GET sú povolené iba znaky ASCII. V metóde POST takéto obmedzenie neexistuje.
- GET je v porovnaní s POST menej bezpečný, pretože odoslané údaje sú súčasťou adresy URL. Metóda GET by sa teda nemala používať pri odosielaní hesiel alebo iných citlivých informácií.