requests.get() în Python

HTTP și rețea requests 2.0+

Trimite o cerere HTTP GET și returnează răspunsul: cod de stare, antete, text sau JSON.

Sintaxă
requests.get(url, params=None, headers=None, timeout=None, **kwargs)
r.status_code, r.text, r.json(), r.headers, r.url

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ști requests.exceptions.JSONDecodeError. Verifică întâi status_code sau folosește raise_for_status().
  • Construiești URL-ul de mână cu f"...?oras={oras}". Diacriticele, spațiile și & din valori strică adresa; folosește params.
  • Îț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.