GET i POST zahtjevi pomoću Pythona
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: %s n Longitude: %s n Formatted Address: %s ' % ( latitude longitude formatted_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.