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, sealhulgas Authorization 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.