El paquete requests es una biblioteca poderosa y fácil de usar para realizar solicitudes HTTP en Python.
Esta guía cubre todos los métodos principales (GET, POST, PUT, DELETE, etc.) con ejemplos prácticos.
Primero, instala el paquete con pip si no lo tienes aún:
pip install requests GET:El método GET se utiliza para obtener datos de un servidor.
Ejemplo:
import requests
try:
response = requests.get("https://jsonplaceholder.typicode.com/posts/1", timeout=10) # Timeout para evitar bloqueos
response.raise_for_status() # Lanza una excepción para códigos de error HTTP (4xx, 5xx)
data = response.json() # Procesar el JSON de la respuesta
print(data)
except requests.exceptions.HTTPError as http_err:
print(f"HTTP error occurred: {http_err}") # Manejo de errores HTTP específicos
except requests.exceptions.RequestException as req_err:
print(f"Request error occurred: {req_err}") # Manejo general de errores de requests try/except: Maneja errores como fallos de conexión, tiempo de espera, o códigos de estado HTTP problemáticos.timeout: Evita bloqueos prolongados si el servidor no responde.raise_for_status: Detecta errores HTTP automáticamente y lanza una excepción para manejarlo.Puedes pasar parámetros a la URL usando el argumento params.
Ejemplo:
import requests
# Definir los parámetros de consulta
params = {"userId": 1}
try:
# Realizar la solicitud GET con parámetros
response = requests.get("https://jsonplaceholder.typicode.com/posts", params=params, timeout=10)
response.raise_for_status() # Lanza una excepción para errores HTTP
# Procesar la respuesta
data = response.json()
print("Posts del usuario 1:")
for post in data:
print(f"- {post['id']}: {post['title']}")
except requests.exceptions.HTTPError as http_err:
print(f"HTTP error occurred: {http_err}")
except requests.exceptions.RequestException as req_err:
print(f"Request error occurred: {req_err}") timeout: Establecido para evitar bloqueos.raise_for_status: Detecta y maneja errores HTTP automáticamente.
Iteración en la respuesta JSON: Muestra los resultados de forma más clara y estructurada.try/except: Para manejar posibles errores en la solicitud.POST:El método POST se usa para enviar datos al servidor.
Ejemplo:
import requests
# Datos a enviar en la solicitud POST
data = {
"title": "foo",
"body": "bar",
"userId": 1
}
try:
# Realizar la solicitud POST
response = requests.post("https://jsonplaceholder.typicode.com/posts", json=data, timeout=10)
response.raise_for_status() # Lanza una excepción para errores HTTP
# Procesar y mostrar la respuesta
created_post = response.json()
print("Post creado con éxito:")
print(f"ID: {created_post['id']}")
print(f"Título: {created_post['title']}")
print(f"Contenido: {created_post['body']}")
except requests.exceptions.HTTPError as http_err:
print(f"HTTP error occurred: {http_err}")
except requests.exceptions.RequestException as req_err:
print(f"Request error occurred: {req_err}") timeout: Evita bloqueos si el servidor no responde.raise_for_status: Detecta y maneja errores HTTP automáticamente.try/except: Para manejar errores relacionados con la solicitud.PUT:El método PUT se usa para actualizar datos existentes.
Ejemplo:
import requests
# Datos para actualizar el post
data = {
"title": "updated title",
"body": "updated body"
}
try:
# Realizar la solicitud PUT
response = requests.put("https://jsonplaceholder.typicode.com/posts/1", json=data, timeout=10)
response.raise_for_status() # Lanza una excepción si ocurre un error HTTP
# Procesar y mostrar la respuesta
updated_post = response.json()
print("Post actualizado con éxito:")
print(f"ID: {updated_post['id']}")
print(f"Título: {updated_post['title']}")
print(f"Contenido: {updated_post['body']}")
except requests.exceptions.HTTPError as http_err:
print(f"HTTP error occurred: {http_err}")
except requests.exceptions.RequestException as req_err:
print(f"Request error occurred: {req_err}") timeout: Establecido para evitar bloqueos prolongados.raise_for_status: Lanza excepciones para manejar errores HTTP automáticamente.try/except: Para manejar errores relacionados con la solicitud y asegurar robustez en el código.DELETE:El método DELETE elimina un recurso.
Ejemplo:
import requests
try:
# Realizar la solicitud DELETE
response = requests.delete("https://jsonplaceholder.typicode.com/posts/1", timeout=10)
response.raise_for_status() # Lanza una excepción para errores HTTP
# Verificar la respuesta
if response.status_code == 200:
print("El recurso fue eliminado exitosamente.")
else:
print(f"Eliminación no completada. Código de estado: {response.status_code}")
except requests.exceptions.HTTPError as http_err:
print(f"HTTP error occurred: {http_err}")
except requests.exceptions.RequestException as req_err:
print(f"Request error occurred: {req_err}") timeout: Evita bloqueos prolongados si el servidor no responde.raise_for_status: Detecta y maneja errores HTTP automáticamente.Mensajes más claros: Describe mejor el estado de la operación.try/except: Añade robustez para manejar posibles errores en la solicitud.Puedes enviar encabezados HTTP personalizados usando el parámetro headers.
Ejemplo:
import requests
# Encabezados personalizados
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"User-Agent": "MyApp/1.0"
}
try:
# Realizar la solicitud GET con encabezados personalizados
response = requests.get("https://api.example.com/data", headers=headers, timeout=10)
response.raise_for_status() # Lanza una excepción para errores HTTP
# Procesar la respuesta
data = response.json()
print("Datos obtenidos exitosamente:")
for item in data:
print(f"- {item}") # Ajusta según la estructura de la respuesta
except requests.exceptions.HTTPError as http_err:
print(f"HTTP error occurred: {http_err}")
except requests.exceptions.RequestException as req_err:
print(f"Request error occurred: {req_err}") timeout: Evita que el código quede bloqueado si el servidor no responde.raise_for_status: Detecta automáticamente errores HTTP y los maneja.try/except para capturar excepciones específicas y generales.Encabezados adicionales: Incluye un User-Agent como buena práctica.Las sesiones permiten mantener datos como cookies entre solicitudes.
Ejemplo:
import requests
session = requests.Session()
session.headers.update({"User-Agent": "my-app"})
response = session.get("https://jsonplaceholder.typicode.com/posts/1")
print(response.json()) Puedes subir archivos usando el parámetro files.
Ejemplo:
import requests
# Ruta del archivo a enviar
file_path = "example.pdf" # Cambiar por la ruta de la imagen, audio, o archivo deseado
try:
# Abrir el archivo en modo binario
with open(file_path, "rb") as file:
files = {"file": file}
# Realizar la solicitud POST con el archivo adjunto
response = requests.post("https://httpbin.org/post", files=files, timeout=10)
response.raise_for_status() # Lanza una excepción para errores HTTP
# Procesar y mostrar la respuesta
response_data = response.json()
print("Archivo enviado exitosamente. Respuesta del servidor:")
print(response_data)
except FileNotFoundError:
print(f"Error: El archivo '{file_path}' no fue encontrado.")
except requests.exceptions.HTTPError as http_err:
print(f"HTTP error occurred: {http_err}")
except requests.exceptions.RequestException as req_err:
print(f"Request error occurred: {req_err}")
except Exception as e:
print(f"Error inesperado: {e}") with open: Asegura que el archivo se cierre automáticamente después de su uso.FileNotFoundError si el archivo no puede ser abierto.requests.timeout: Evita bloqueos prolongados si el servidor no responde.Este enfoque es útil para enviar archivos binarios (imágenes, audios, PDFs, etc.) a un servidor.
Solo ajusta la variable file_path con la ruta del archivo que deseas enviar.
Usa try-except para manejar errores en solicitudes HTTP.
Ejemplo:
import requests
try:
response = requests.get("https://jsonplaceholder.typicode.com/posts/1", timeout=5)
response.raise_for_status()
print(response.json())
except requests.exceptions.RequestException as e:
print(f"Error: {e}") ✨ Desarrollo moderno y escalable
⚡ Entregas puntuales
💡 Soluciones que funcionan
¡Conversemos!
WhatsApp