Requests¶
HTTP-päringud on veebiprogrammeerimise põhielement, võimaldades andmete vahetust ja suhtlust veebiserveritega. Iga veebilehe külastus, andmevahetus ja API kasutamine tugineb HTTP protokolli kasutamisele, mis määrab, kuidas veebiressursse taotletakse ja edastatakse. Veebiarenduses on HTTP-päringute käsitlemine kriitilise tähtsusega, võimaldades luua dünaamilisi rakendusi, mis suhtlevad erinevate veebiteenustega.
Pythoni requests moodul on loodud selleks, et muuta HTTP-päringute tegemine lihtsaks ja arusaadavaks. See pakub mugavat ja loetavat liidest erinevat tüüpi HTTP-päringute tegemiseks, nagu GET, POST, PUT ja DELETE. Moodul hõlbustab autentimist, päiste haldamist, sessioonide käsitlemist ja veatöötlust, muutes keerulise võrgusuhtluse lihtsaks ja kergesti hallatavaks. Erinevalt madalama taseme võrguteekidest pakub requests lihtsat ja arusaadavat API-d, mis muudab selle ligipääsetavaks nii algajatele kui ka kogenud arendajatele.
GET-Päring
GET-päring on HTTP-päringu tüüp, mida kasutatakse andmete taotlemiseks serverilt. GET-päringuid tehakse, kui vajatakse informatsiooni, näiteks veebilehtede sisu või API kaudu saadavaid andmeid.
response = requests.get('https://www.google.com')
return response.text
requests.get('https://example.com/data')
teeb GET-päringu määratud URL-ile.response.text
on atribuut, mis annab vastuse sisu Unicode tekstina.
POST-Päring
POST-päringuid kasutatakse andmete saatmiseks serverile. Näiteks veebivormide esitamine või andmete üleslaadimine toimub tavaliselt POST-päringute kaudu.
data = {'username': 'Toomas123', 'password': '*'}
response = requests.post('https://example.com/submit', data=data)
return response.text
requests.post('https://example.com/submit', data=data)
saadab POST-päringu koos andmetega.data
on sõnastik, mis esindab saatmiseks mõeldud andmeid.response.text
on atribuut, mis sisaldab serveri vastust, näiteks autentimise tulemust või muud teavet.
PUT-Päring
PUT-päringut kasutatakse olemasolevate andmete muutmiseks või värskendamiseks.
Kujuta ette, et sul on rakendus, mis haldab kasutajate profiile ning iga kasutaja profiili jaoks on unikaalne ID. PUT-päringuga saad muuta näiteks tema nime.
data = {'name': 'Ago Luberg'}
UID = 6745203842
response = requests.put(f'https://example.com/user/profile/{UID}', data=data)
return response.text
requests.put(f'https://example.com/user/profile/{UID}', data=data)
saadab PUT-päringu koos andmetega.data
on sõnastik, mis esindab saatmiseks mõeldud andmeid.response.text
on atribuut, mis sisaldab serveri vastust, näiteks andmeüksuse uuendatud versiooni või kinnituse muudatuste kohta.
STREAM-päring
Stream-päringud on kasulikud, kui peate töötlema suuri andmemahtusid, näiteks suuri faile või pidevalt uuenevaid andmevooge. Sellistes olukordades ei pruugi olla otstarbekas või võimalik kogu vastust korraga mällu laadida.
response = requests.get('http://example.com/largefile', stream=True)
# Loeme vastust väikeste osade kaupa
for chunk in response.iter_content(chunk_size=8192):
if chunk: # filtreerime välja "keep-alive" uued read
print(chunk)
stream=True
ütleb requests-ile, et ei lae kogu vastust korraga mällu.response.iter_content(chunk_size=8192)
itereerib vastuse üle kindla suurusega tükkidena.chunk_size
määrab iga tüki suuruse baitides.response.iter_lines()
itereerib vastuse üle rida-realt. Iga rida loetakse eraldi, mis on kasulik suurte andmevoogude puhul või kui iga rida sisaldab eraldiseisvat teavet.
Stream-päringute puhul on oluline jälgida, et kõik andmed oleksid korrektselt töödeldud ja et ressursid oleksid korralikult vabastatud. Näiteks, kui kasutate andmete lugemiseks väliseid ressursse (nt faili kirjutamine), veenduge, et need oleksid korrektselt suletud.
Autoriseerimine
Kui teete API-päringuid, mis nõuavad autentimist, võite sageli kasutada Authorization päist koos kandemärgiga (bearer token). See on levinud viis API-dele autentimiseks, eriti kui tegemist on OAuth2-ga.
url = 'http://example.com/api/data'
auth_token = 'your_auth_token_here'
headers = {'Authorization': f'Bearer {auth_token}'}
response = requests.get(url, headers=headers)
print(response.text)
auth_token
on teie autentimismärgis, mille olete saanud API-lt või teie autentimissüsteemilt. See võib olla JWT (JSON Web Token), OAuth2 märk või mõni muu turvamärk.headers
on päised, mis sisaldavad autentimiseks vajalikku teavet, sealhulgasAuthorization
päist, mis edastab autentimise.response.text
on atribuut, mis sisaldab serveri vastust, näiteks andmeid või kinnituse autentimise kohta.
Veatöötlus
HTTP-päringute tegemisel võib tekkida vajadus käsitleda võimalikke vigu. requests võimaldab käidelda erandeid:
try:
r = requests.get(url)
r.raise_for_status()
print(r.text)
except requests.RequestException as exception:
print(exception)
raise_for_status()
viskab erandi, kui HTTP-päring ei õnnestunud (st kui vastuse staatusekood ei ole vahemikus 200–299). See on kasulik viis vea kiireks avastamiseks päringu tegemisel.requests.RequestException
on peamine erandiklass, millest kõik teised HTTP-päringutega seotud erandid tuletatakse. See hõlmab kõiki võimalikke erandeid, mis võivad tekkida päringu tegemisel, alates võrguprobleemidest kuni HTTP-vastuse vigadeni.
Näide: Kui teie päring ei õnnestu võrguühenduse probleemide tõttu või kui vastuseks on 500 Internal Server Error, püütakse see erand kinni ning saate sellele vastavalt reageerida.
Alati kontrolli vastuse staatusekoodi ja ole valmis käitlema võimalikke erandeid.