Această postare discută două metode de solicitare HTTP (Hypertext Transfer Protocol) cereri GET și POST în Python și implementarea lor în Python.
Ce este HTTP?
HTTP este un set de protocoale concepute pentru a permite comunicarea între clienți și servere. Funcționează ca un protocol cerere-răspuns între un client și un server. Un browser web poate fi clientul, iar o aplicație de pe un computer care găzduiește un site web poate fi serverul. Deci, pentru a solicita un răspuns de la server, există în principal două metode:
- OBŢINE : Pentru a solicita date de la server.
- POST : Pentru a trimite date pentru a fi procesate către server.
Iată o diagramă simplă care explică conceptul de bază al metodelor GET și POST.
Acum pentru a face cereri HTTP în Piton putem folosi mai multe biblioteci HTTP precum:
Cea mai elegantă și simplă dintre bibliotecile enumerate mai sus este Requests. Vom folosi biblioteca de solicitări în acest articol. Pentru a descărca și instala biblioteca de solicitări, utilizați următoarea comandă:
pip install requestsEfectuarea unei cereri Obținere
Exemplul de mai sus găsește latitudinea longitudinei și adresa formatată a unei anumite locații trimițând o solicitare GET către API-ul Google Maps. Un API (Interfața de programare a aplicației) vă permite să accesați caracteristicile interne ale unui program într-un mod limitat. Și în majoritatea cazurilor datele furnizate sunt în JSON (notație obiect JavaScript) format (care este implementat ca obiecte dicționar în Python!).
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))
Ieșire:
Puncte importante de dedus:
PARAMS = {'address':location}Adresa URL pentru o solicitare GET poartă în general câțiva parametri cu ea. Pentru cereri, parametrii bibliotecii pot fi definiți ca un dicționar. Acești parametri sunt analizați ulterior și adăugați la adresa URL de bază sau la punctul final API. Pentru a înțelege rolul parametrului, încercați să imprimați r.url după ce obiectul răspuns este creat. Veți vedea așa ceva:
http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+universityAceasta este adresa URL reală pe care se face solicitarea GET
r = requests.get(url = URL params = PARAMS)Aici creăm un obiect de răspuns „r” care va stoca cererea-răspuns. Folosim metoda requests.get() deoarece trimitem o cerere GET. Cele două argumente pe care le transmitem sunt URL și dicționarul de parametri.
data = r.json()Acum, pentru a prelua datele din obiectul de răspuns, trebuie să convertim conținutul răspunsului brut într-o structură de date de tip JSON. Acest lucru se realizează prin utilizarea metodei json(). În cele din urmă, extragem informațiile necesare prin analizarea obiectului de tip JSON.
Efectuarea unei cereri POST
Acest exemplu explică cum să lipiți cod_sursă la pastebin.com prin trimiterea unei cereri POST către API-ul PASTEBIN. În primul rând, va trebui să generați o cheie API prin înscrierea aici și apoi accesarea dvs Cheia API aici.
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)
Caracteristici importante ale acestui cod:
data = {'api_dev_key':API_KEY
'api_option':'paste'
'api_paste_code':source_code
'api_paste_format':'python'}
Aici, din nou, va trebui să transmitem câteva date serverului API. Stocăm aceste date ca dicționar.
r = requests.post(url = API_ENDPOINT data = data)Aici creăm un obiect de răspuns „r” care va stoca cererea-răspuns. Folosim metoda requests.post() deoarece trimitem o cerere POST. Cele două argumente pe care le transmitem sunt URL-ul și dicționarul de date.
pastebin_url = r.textCa răspuns, serverul prelucrează datele trimise către acesta și trimite pastebin_URL-ul dvs cod_sursă care poate fi accesat pur și simplu de r.text.
cereri.post metoda ar putea fi utilizată pentru multe alte sarcini, precum și pentru completarea și trimiterea formularelor web postate pe cronologia FB folosind API-ul Facebook Graph etc.
Iată câteva puncte importante la care să reflectați:
- Când metoda este GET, toate datele din formular sunt codificate în URL și atașate la acţiune URL ca parametri ai șirului de interogare. Cu datele formularului POST apar în cadrul corpul mesajului a cererii HTTP.
- În metoda GET, datele parametrilor sunt limitate la ceea ce putem introduce în linia de solicitare (URL). Cel mai sigur este să utilizați mai puțin de 2K de parametri, unele servere gestionează până la 64K. Nu există o astfel de problemă în metoda POST, deoarece trimitem date în corpul mesajului a cererii HTTP nu URL-ul.
- Numai caracterele ASCII sunt permise pentru ca datele să fie trimise în metoda GET. Nu există o astfel de restricție în metoda POST.
- GET este mai puțin sigur în comparație cu POST, deoarece datele trimise fac parte din adresa URL. Prin urmare, metoda GET nu trebuie folosită atunci când trimiteți parole sau alte informații sensibile.