Ta objava obravnava dve metodi zahtev HTTP (Hypertext Transfer Protocol) zahtevi GET in POST v Pythonu in njuno implementacijo v Pythonu.
Kaj je HTTP?
HTTP je nabor protokolov, zasnovanih za omogočanje komunikacije med odjemalci in strežniki. Deluje kot protokol zahteva-odgovor med odjemalcem in strežnikom. Spletni brskalnik je lahko odjemalec, aplikacija v računalniku, ki gosti spletno stran, pa strežnik. Za zahtevanje odgovora od strežnika obstajata predvsem dva načina:
- DOBITI : Zahtevati podatke od strežnika.
- OBJAVI : Za pošiljanje podatkov za obdelavo strežniku.
Tukaj je preprost diagram, ki pojasnjuje osnovni koncept metod GET in POST.
Zdaj pa vnesite zahteve HTTP Python lahko uporabimo več knjižnic HTTP, kot so:
Najelegantnejša in najpreprostejša od zgoraj naštetih knjižnic je Requests. V tem članku bomo uporabljali knjižnico zahtev. Za prenos in namestitev knjižnice zahtev uporabite naslednji ukaz:
pip install requestsIzdelava zahteve Get
Zgornji primer najde zemljepisno širino, dolžino in oblikovan naslov dane lokacije s pošiljanjem zahteve GET API-ju za Google Zemljevide. An API (Vmesnik za programiranje aplikacij) vam omogoča dostop do notranjih funkcij programa na omejen način. In v večini primerov so predloženi podatki v JSON (Zapis predmeta JavaScript) format (ki je implementiran kot slovarski objekti v Pythonu!).
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))
Izhod:
Pomembne točke za sklepanje:
PARAMS = {'address':location}URL za zahtevo GET na splošno vsebuje nekaj parametrov. Za knjižnico zahtev lahko parametre definiramo kot slovar. Ti parametri se pozneje razčlenijo in dodajo osnovnemu URL-ju ali končni točki API-ja. Če želite razumeti vlogo parametra, poskusite natisniti r.url potem ko je ustvarjen odzivni objekt. Videli boste nekaj takega:
http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+universityTo je dejanski URL, na katerem je narejena zahteva GET
r = requests.get(url = URL params = PARAMS)Tukaj ustvarimo odzivni objekt 'r', ki bo shranil zahtevo-odgovor. Uporabljamo metodo requests.get(), saj pošiljamo zahtevo GET. Dva argumenta, ki ju posredujemo, sta URL in slovar parametrov.
data = r.json()Zdaj, da pridobimo podatke iz objekta odziva, moramo neobdelano vsebino odgovora pretvoriti v podatkovno strukturo tipa JSON. To dosežemo z uporabo metode json(). Na koncu izvlečemo zahtevane informacije z razčlenjevanjem predmeta tipa JSON.
Izdelava zahteve POST
Ta primer pojasnjuje, kako prilepiti svoj izvorna_koda do pastebin.com tako, da API-ju PASTEBIN pošljete zahtevo POST. Najprej boste morali ustvariti ključ API z prijava tukaj in nato dostopate do svojega API ključ tukaj.
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)
Pomembne značilnosti te kode:
data = {'api_dev_key':API_KEY
'api_option':'paste'
'api_paste_code':source_code
'api_paste_format':'python'}
Tudi tukaj bomo morali nekaj podatkov posredovati strežniku API. Te podatke hranimo kot slovar.
r = requests.post(url = API_ENDPOINT data = data)Tukaj ustvarimo odzivni objekt 'r', ki bo shranil zahtevo-odgovor. Uporabljamo metodo requests.post(), saj pošiljamo zahtevo POST. Dva argumenta, ki ju posredujemo, sta URL in podatkovni slovar.
pastebin_url = r.textV odgovor strežnik obdela podatke, ki so mu poslani, in pošlje pastebin_URL vašega izvorna_koda do katerega je mogoče preprosto dostopati r.text.
zahteve.post metodo bi lahko uporabili za številna druga opravila, kot je izpolnjevanje in pošiljanje spletnih obrazcev, objavljanje na vaši časovni premici FB z uporabo API-ja Facebook Graph itd.
Tukaj je nekaj pomembnih točk, o katerih je treba razmisliti:
- Ko je metoda GET, so vsi podatki obrazca kodirani v URL in dodani v ukrepanje URL kot parametri poizvedbenega niza. Z obrazcem POST se podatki prikažejo znotraj telo sporočila zahteve HTTP.
- Pri metodi GET so podatki o parametrih omejeni na tisto, kar lahko vnesemo v vrstico zahteve (URL). Najvarnejša je uporaba manj kot 2K parametrov, nekateri strežniki obravnavajo do 64K. Pri metodi POST ni te težave, saj pošiljamo podatke v telo sporočila zahteve HTTP in ne URL-ja.
- Za pošiljanje podatkov v metodi GET so dovoljeni samo znaki ASCII. Pri metodi POST te omejitve ni.
- GET je manj varen v primerjavi s POST, ker so poslani podatki del URL-ja. Torej metode GET ne bi smeli uporabljati pri pošiljanju gesel ali drugih občutljivih informacij.