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}")