Ovaj post govori o dvije HTTP (Hypertext Transfer Protocol) metode zahtjeva GET i POST zahtjevi u Pythonu i njihovoj implementaciji u Pythonu.
Što je HTTP?
HTTP je skup protokola dizajniranih da omoguće komunikaciju između klijenata i poslužitelja. Radi kao protokol zahtjev-odgovor između klijenta i poslužitelja. Web preglednik može biti klijent, a aplikacija na računalu koje ugošćuje web stranicu može biti poslužitelj. Dakle, za traženje odgovora od poslužitelja postoje uglavnom dvije metode:
- DOBITI : Za traženje podataka s poslužitelja.
- POST : Za slanje podataka za obradu na poslužitelj.
Ovdje je jednostavan dijagram koji objašnjava osnovni koncept GET i POST metoda.
Sada za upućivanje HTTP zahtjeva Piton možemo koristiti nekoliko HTTP biblioteka kao što su:
Najelegantnija i najjednostavnija od gore navedenih biblioteka je Zahtjevi. U ovom ćemo članku koristiti biblioteku zahtjeva. Za preuzimanje i instaliranje biblioteke zahtjeva upotrijebite sljedeću naredbu:
pip install requestsIzrada zahtjeva za dobivanje
Gornji primjer pronalazi zemljopisnu širinu, dužinu i formatiranu adresu dane lokacije slanjem GET zahtjeva API-ju za Google karte. An API (Aplikacijsko programsko sučelje) omogućuje vam pristup internim značajkama programa na ograničen način. I u većini slučajeva navedeni podaci su unutra JSON (JavaScript Object Notation) formatu (koji je implementiran kao objekti rječnika u 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))
Izlaz:
Važne točke za zaključivanje:
PARAMS = {'address':location}URL za GET zahtjev općenito sa sobom nosi neke parametre. Za biblioteku zahtjeva parametri se mogu definirati kao rječnik. Ti se parametri kasnije analiziraju i dodaju u osnovni URL ili krajnju točku API-ja. Da biste razumjeli ulogu parametra pokušajte ispisati r.url nakon što se kreira objekt odgovora. Vidjet ćete nešto poput ovoga:
http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+universityOvo je stvarni URL na kojem je postavljen GET zahtjev
r = requests.get(url = URL params = PARAMS)Ovdje stvaramo objekt odgovora 'r' koji će pohraniti zahtjev-odgovor. Koristimo requests.get() metodu jer šaljemo GET zahtjev. Dva argumenta koja prosljeđujemo su URL i rječnik parametara.
data = r.json()Kako bismo dohvatili podatke iz objekta odgovora, moramo pretvoriti neobrađeni sadržaj odgovora u podatkovnu strukturu tipa JSON. To se postiže korištenjem json() metode. Na kraju izdvajamo tražene informacije raščlanjivanjem objekta tipa JSON.
Izrada POST zahtjeva
Ovaj primjer objašnjava kako zalijepiti svoj izvorni_kod do pastebin.com slanjem POST zahtjeva PASTEBIN API-ju. Prije svega morat ćete generirati API ključ pomoću prijavljivanje ovdje a zatim pristupiti vašem API ključ ovdje.
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)
Važne značajke ovog koda:
data = {'api_dev_key':API_KEY
'api_option':'paste'
'api_paste_code':source_code
'api_paste_format':'python'}
I ovdje ćemo morati proslijediti neke podatke API poslužitelju. Ove podatke pohranjujemo kao rječnik.
r = requests.post(url = API_ENDPOINT data = data)Ovdje stvaramo objekt odgovora 'r' koji će pohraniti zahtjev-odgovor. Koristimo requests.post() metodu budući da šaljemo POST zahtjev. Dva argumenta koja prosljeđujemo su URL i rječnik podataka.
pastebin_url = r.textKao odgovor poslužitelj obrađuje podatke koji su mu poslani i šalje pastebin_URL vašeg izvorni_kod kojima se može jednostavno pristupiti r.tekst.
zahtjevi.post Metoda se može koristiti za mnoge druge zadatke kao što je ispunjavanje i slanje web obrazaca koji se postavljaju na vašu FB vremensku traku pomoću Facebook Graph API-ja itd.
Evo nekoliko važnih točaka o kojima treba razmisliti:
- Kada je metoda GET, svi podaci obrasca su kodirani u URL i dodani u akcijski URL kao parametri niza upita. Uz POST obrazac podaci se pojavljuju unutar tijelo poruke HTTP zahtjeva.
- U GET metodi podaci o parametrima ograničeni su na ono što možemo ubaciti u red zahtjeva (URL). Najsigurnije je koristiti manje od 2K parametara, neki poslužitelji obrađuju do 64K. Nema takvog problema u POST metodi budući da podatke šaljemo u tijelo poruke HTTP zahtjeva, a ne URL-a.
- Samo su ASCII znakovi dopušteni za slanje podataka u metodi GET. Ne postoji takvo ograničenje u POST metodi.
- GET je manje siguran u usporedbi s POST-om jer su poslani podaci dio URL-a. Stoga se metoda GET ne bi trebala koristiti pri slanju lozinki ili drugih osjetljivih informacija.