Ce face requests.get()
requests este un pachet extern (pip install requests) pentru cereri HTTP, mai simplu de folosit decât modulul standard urllib.request. requests.get(url) descarcă o pagină sau un răspuns de API și returnează un obiect Response.
Din răspuns folosești status_code (200 înseamnă succes, 404 pagină negăsită), text (conținutul ca text), json() (conținutul JSON transformat în dicționar sau listă), headers (antetele, cu nume fără diferență între litere mari și mici) și url (adresa finală). Parametrii de interogare îi dai ca dicționar în params; requests îi codifică singur, inclusiv diacriticele.
Pune mereu timeout (în secunde). Fără el, o cerere spre un server care nu răspunde poate aștepta la nesfârșit.
Parametri
| Parametru | Descriere |
|---|---|
url |
Adresa, cu http:// sau https://. |
params |
Dicționar cu parametrii adăugați după ? în URL. |
headers |
Dicționar cu antete HTTP, de exemplu {"User-Agent": "..."}. |
timeout |
Secunde de așteptare: un număr sau un tuplu (conectare, citire). |
auth |
Autentificare, de exemplu ("utilizator", "parola"). |
Ce returnează
Un obiect requests.Response.
Exemple
Exemplul 1: Cerere cu parametri și răspuns JSON
httpbin.org este un serviciu de test care trimite înapoi ce a primit. Iași apare codificat în URL, dar json() îl dă înapoi corect.
import requests
r = requests.get(
"https://httpbin.org/get",
params={"oras": "Iași", "pagina": 2},
timeout=10,
)
print(r.status_code)
print(r.url)
print(r.headers["Content-Type"])
date = r.json()
print(date["args"])
Rezultat posibil (diferă la fiecare rulare)
200
https://httpbin.org/get?oras=Ia%C8%99i&pagina=2
application/json
{'oras': 'Iași', 'pagina': '2'}
Exemplul 2: Mai multe cereri cu o sesiune
Un requests.Session păstrează antetele și conexiunea între cereri, util când faci multe cereri spre același server.
import requests
with requests.Session() as sesiune:
sesiune.headers["User-Agent"] = "magazin-ana/1.0"
for numar in (1, 2):
r = sesiune.get("https://httpbin.org/get", params={"pagina": numar}, timeout=10)
print(r.status_code, r.json()["args"], r.json()["headers"]["User-Agent"])
Rezultat posibil (diferă la fiecare rulare)
200 {'pagina': '1'} magazin-ana/1.0
200 {'pagina': '2'} magazin-ana/1.0
Greșeli frecvente
- Nu pui
timeout, iar programul se blochează când serverul nu răspunde. - Apelezi
r.json()pe un răspuns care nu e JSON (de exemplu o pagină de eroare HTML) și primeștirequests.exceptions.JSONDecodeError. Verifică întâistatus_codesau foloseșteraise_for_status(). - Construiești URL-ul de mână cu
f"...?oras={oras}". Diacriticele, spațiile și&din valori strică adresa; foloseșteparams. - Îți numești fișierul
requests.py.import requestsîți încarcă propriul fișier, nu pachetul.
Comenzi înrudite
requests.post(): Trimite date la un server prin HTTP POST: JSON pentru API-uri sau câmpuri de formular.raise_for_status() și timeout: Transformă răspunsurile de eroare (4xx, 5xx) în excepții și limitează cât așteaptă o cerere.pip install: Instalează pachete Python de pe PyPI, cu o versiune anume sau la ultima versiune, împreună cu dependențele lor.json.loads(): Transformă un text JSON în valori Python: dicționare, liste, texte, numere.