Zahteve GET in POST z uporabo Pythona

Zahteve GET in POST z uporabo Pythona

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:

  1. DOBITI : Zahtevati podatke od strežnika.
  2. OBJAVI : Za pošiljanje podatkov za obdelavo strežniku.

Tukaj je preprost diagram, ki pojasnjuje osnovni koncept metod GET in POST.

Zahteve GET in POST z uporabo Pythona 

 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 requests  

Izdelava 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:  %s  n  Longitude:  %s  n  Formatted Address:  %s  '   %  (  latitude     longitude    formatted_address  ))   

Izhod:

Zahteve GET in POST z uporabo Pythona

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+university  

To 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.text  

V 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.
Ustvari kviz