Los mejores descubrimientos casi siempre se hacen sobre la marcha. Precisamente de este modo fue como me encontré con el módulo import xmlrpc.client, una forma sencilla de lograr comunicarse con un servidor remoto sin necesidad de construir una API REST desde cero. Este módulo simplifica la ejecución de llamadas remotas a procedimientos en un servidor a través del protocolo XML-RPC. En el día de hoy te explicaré más detalladamente qué es este módulo y cómo puedes usarlo en Python.
¿Qué es import xmlrpc.client?
El módulo import xmlrpc.client de Python hace posible que un cliente realice llamadas a procedimientos remotos en un servidor mediante XML-RPC. Este protocolo se basa en el uso de XML para la comunicación entre el cliente y el servidor y transmite datos a través de HTTP o HTTPS. Es una opción más ligera y sencilla para aquellos programadores que necesitan implementar comunicación remota sin tener que recurrir a arquitecturas mucho más complejas, como REST o gRPC. Grosso modo, import xmlrpc.client nos permite llamar a funciones en otro servidor como si fueran funciones locales en el código de Python, por medio del envío y recepción de datos estructurados en XML.
xmlrpc.client te ayuda a llamar funciones en otro servidor como si estuvieran en tu código local de Python. Básicamente, envía y recibe datos en formato XML para que la comunicación sea sencilla y estructurada.
¿Cómo usar import xmlrpc.client?
Imagina a import xmlrpc.client como un teléfono que nos permite llamar a un servicio remoto. Así pues, marcas un número (en este caso la URL del servidor), le haces una pregunta (el método remoto que quieres ejecutar con sus parámetros) y esperas una respuesta. Python es el encargado de convertir los datos en XML, de enviarlos por HTTP y de recibir la respuesta automáticamente. Veamos algunos de los usos que le podemos dar a esta herramienta:
- Conectarse a un servidor XML-RPC: Para conectar un cliente con un servidor XML-RPC, se usa la clase ServerProxy, que actúa como un intermediario para enviar y recibir datos desde el servidor. Así se implementa dentro de Python:
import xmlrpc.client
# Definir la URL del servidor XML-RPC
server = xmlrpc.client.ServerProxy("http://localhost:8000/")
# Llamar a un método remoto
resultado = server.suma(5, 3)
print(f"El resultado de la suma es: {resultado}")
En este ejemplo, el cliente se conecta a un servidor en localhost y llama al método suma, el cual debe estar definido en el servidor.
- Crear un servidor XML-RPC para pruebas: Si deseas probar cómo funciona el cliente, puedes levantar un servidor XML-RPC dentro de tu computador con xmlrpc.server. Hazlo así:
from xmlrpc.server import SimpleXMLRPCServer
# Función que será accesible remotamente
def suma(a, b):
return a + b
# Crear el servidor en el puerto 8000
servidor = SimpleXMLRPCServer(("localhost", 8000))
servidor.register_function(suma, "suma")
print("Servidor XML-RPC en ejecución...")
servidor.serve_forever()
Ahora, si ejecutas el cliente, se conectará al servidor y obtendrás el resultado de la suma de 5 + 3.
¿Qué hacer si se presenta un error en import xmlrpc.client?
Cuando trabajamos con servidores remotos, es pertinente recordar que manejar errores como fallos de conexión o respuestas inesperadas es el pan de cada día. En este aspecto, import xmlrpc.client nos facilita clases para manejar estos errores de la manera más adecuada. Veamos cómo:
import xmlrpc.client
server = xmlrpc.client.ServerProxy("http://localhost:8000/")
try:
resultado = server.suma(5, "tres") # Error intencional
except xmlrpc.client.Fault as err:
print(f"Error en la llamada XML-RPC: {err.faultString}")
except xmlrpc.client.ProtocolError as err:
print(f"Error de protocolo: {err.errmsg}")
🔴 ¿Quieres Aprender a Programar con Python? 🔴
Descubre el Full Stack Jr. Bootcamp - Aprende a Programar desde Cero de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada
👉 Prueba gratis el Bootcamp Aprende a Programar desde Cero por una semanaxmlrpc.client.Fault se genera cuando el servidor responde con un error, mientras que xmlrpc.client.ProtocolError ocurre cuando hay problemas en la comunicación HTTP.
Transferencia de datos complejos con import xmlrpc.client
XML-RPC soporta varios tipos de datos, incluidos enteros, cadenas, listas y diccionarios. Empero, para manejar tipos más avanzados como fechas o archivos binarios, Python ofrece clases específicas.
- Enviar y recibir fechas con xmlrpc.client.DateTime:
import xmlrpc.client
server = xmlrpc.client.ServerProxy("http://localhost:8000/")
fecha_actual = server.obtener_fecha()
# Convertir el formato ISO8601 de XML-RPC a un objeto datetime de Python
from datetime import datetime
fecha_convertida = datetime.strptime(fecha_actual.value, "%Y%m%dT%H:%M:%S")
print(f"La fecha recibida del servidor es: {fecha_convertida}")
El servidor puede enviar la fecha actual utilizando xmlrpc.client.DateTime, asegurando compatibilidad con el protocolo.
- Enviar y recibir archivos binarios con xmlrpc.client.Binary: Si necesitas enviar archivos como imágenes o documentos, puedes usar la clase xmlrpc.client.Binary de la siguiente manera:
import xmlrpc.client
server = xmlrpc.client.ServerProxy("http://localhost:8000/")
# Leer un archivo y enviarlo como binario
with open("imagen.jpg", "rb") as archivo:
data = xmlrpc.client.Binary(archivo.read())
server.guardar_imagen(data)
print("Imagen enviada al servidor con éxito.")
Esto permite transferir datos binarios de manera segura entre cliente y servidor.
Si quieres aprender Python a fondo e integrar servicios remotos en tus aplicaciones, en KeepCoding tenemos un Bootcamp de programación desde cero diseñado para ti. Con este programa intensivo, desarrollarás habilidades en backend, desde los conceptos esenciales hasta la arquitectura avanzada de servidores. La industria tecnológica sigue creciendo, ofreciendo empleos bien remunerados y estabilidad profesional. Es el momento ideal para dar el siguiente paso y cambiar tu futuro con KeepCoding.