Request
Request en Python
Section titled “Request en Python”1) ¿Qué es requests?
Section titled “1) ¿Qué es requests?”- requests es una biblioteca de Python de terceros para realizar solicitudes HTTP/HTTPS de forma sencilla y elegante.
- No viene incluida en la librería estándar de Python, por lo que debe instalarse con pip install requests.
- Permite hacer peticiones como GET, POST, PUT, DELETE, HEAD, PATCH, etc., y gestionar cabeceras, datos, autenticación, cookies, sesiones, entre otros.
- Es muy usada para acceder a APIs web, hacer scraping ligero, o interaccionar con servicios HTTP.
2) Instalación y configuración básica
Section titled “2) Instalación y configuración básica”pip install requestsLuego en tú script:
import requestsAsegúrate de que la versión de Python sea compatible (por ejemplo Python 3.8+ según su documentación).
Tip: Usa un entorno virtual (venv) para instalarla sin afectar dependencias globales.
3) Uso básico — Peticiones HTTP
Section titled “3) Uso básico — Peticiones HTTP”import requests
response = requests.get("https://api.example.com/data")print(response.status_code) # código de estado HTTPprint(response.text) # contenido como textoprint(response.json()) # si es JSON, lo transforma en dict/listEnviar datos:
payload = {"username": "usuario", "password": "secreto"}response = requests.post("https://api.example.com/login", data=payload)Enviar JSON:
response = requests.post("https://api.example.com/login", json=payload)Otros métodos
Section titled “Otros métodos”También puedes usar requests.put(), requests.delete(), requests.head(), requests.patch().
4) Elementos importantes de la respuesta (Response)
Section titled “4) Elementos importantes de la respuesta (Response)”Al hacer una petición, obtienes un objeto Response. Algunos atributos y métodos clave:
- response.status_code → código de estado HTTP (200, 404, 500, etc.).
- response.text → contenido decodificado como texto (string).
- response.content → contenido en bytes.
- response.json() → interpreta el contenido como JSON y devuelve dict o lista (sí aplica).
- response.headers → diccionario con cabeceras HTTP de la respuesta.
- response.elapsed → tiempo que tardó la petición.
- response.raise_for_status() → lanza excepción requests.exceptions.HTTPError sí el código de estado indica error (>=400).
5) Parámetros útiles en la petición
Section titled “5) Parámetros útiles en la petición”Al llamar a requests.get() o requests.post() puedes pasar varios parámetros adicionales para mayor control:
6) Sesiones (requests.Session)
Section titled “6) Sesiones (requests.Session)”Una característica potente: puedes crear un objeto Session para persistir ciertas opciones (como cookies, cabeceras comunes, autenticación) entre múltiples peticiones. Mejora el rendimiento al reutilizar conexiones. Ejemplo:
import requests
s = requests.Session()s.headers.update({"User-Agent": "MiApp/1.0"})response1 = s.get("https://api.example.com/resource1")response2 = s.get("https://api.example.com/resource2")7) Autenticación, SSL y proxies
Section titled “7) Autenticación, SSL y proxies”- Autenticación básica: requests.get(url, auth=(‘user’,‘pass’)).
- Verificación SSL: por defecto verify=True. Sí el servidor tiene certificado inválido, se puede poner verify=False pero no recomendado en producción.
- Puedes especificar proxies para HTTP/HTTPS usando el parámetro proxies.
8) Manejo de errores y excepciones
Section titled “8) Manejo de errores y excepciones”Es importante manejar posibles fallos (timeout, conexión rechazada, etc.). Ejemplo:
import requests
try:response = requests.get("https://api.example.com", timeout=5)response.raise_for_status()except requests.exceptions.HTTPError as errh:print("HTTP Error:", errh)except requests.exceptions.ConnectionError as errc:print("Error de conexión:", errc)except requests.exceptions.Timeout as errt:print("Timeout:", errt)except requests.exceptions.RequestException as err:print("Otro error:", err)Este patrón aparece en tutoriales de requests.
9) Ejemplos completos
Section titled “9) Ejemplos completos”a) Petición GET con parámetros
Section titled “a) Petición GET con parámetros”import requests
url = "https://httpbin.org/get"params = {"q": "python", "page": 1}response = requests.get(url, params=params)print(response.url) # muestra la URL final con query stringprint(response.status_code)print(response.json())b) Petición POST con JSON
Section titled “b) Petición POST con JSON”import requests
url = "https://httpbin.org/post"payload = {"username": "user", "password": "pass"}response = requests.post(url, json=payload)print(response.status_code)print(response.json())c) Uso de sesión con cookies
Section titled “c) Uso de sesión con cookies”import requests
s = requests.Session()s.get("https://httpbin.org/cookies/set/sessioncookie/12345")response = s.get("https://httpbin.org/cookies")print(response.text) # Verás que la cookie se mantiened) Descarga de archivo por streaming
Section titled “d) Descarga de archivo por streaming”import requests
url = "https://example.com/largefile.zip"with requests.get(url, stream=True) as r:r.raise_for_status()with open("largefile.zip", "wb") as f:for chunk in r.iter_content(chunk_size=8192):f.write(chunk)10) Buenas prácticas y consideraciones
Section titled “10) Buenas prácticas y consideraciones”- Siempre establece un timeout razonable para evitar que la petición quede colgada.
- No deshabilites verify=True en producción a menos que sepas lo que haces (evita usar verify=False).
- Para muchas peticiones al mismo host, utiliza Session para aprovechar persistencia de conexión.
- Verifica el estado de la respuesta (status_code, raise_for_status()) antes de procesar los datos.
- Cuando trabajes con APIs, respeta los límites de rate-limit, y maneja redirecciones, errores, retries.
- Evita exponer en el código credenciales sin protección.
- Sí haces scraping de páginas web, respeta los términos de uso del sitio, usa cabeceras User-Agent adecuadas y considera la ética/legales.
11) Resumen rápido
Section titled “11) Resumen rápido”- Librería simple, pero potente para hacer peticiones HTTP en Python.
- Abstrae complejidad de urllib y hace que el código sea más legible.
- Utilizada ampliamente para trabajar con APIs, servicios web, scraping ligero.
- Soporta múltiples métodos HTTP, sesiones, autenticación, verificación SSL, proxies.
- Debes instalarla aparte y aplicarla con buenas prácticas.