El siguiente programa (Servidor) esta diseñado para atender solicitudes de "Estado del Tiempo" vía XMLRPC bajo el puerto TCP 12000
de la máquina local (localhost); después se observará como este mismo Servidor puede atender solicitudes de otros Clientes que no están escritos en Python.
En base a su ambiente puede generar el siguiente Servidor XMLRPC Asegúrese que ningún otro Servidor este corriendo bajo el mismo puerto |
#!/usr/bin/python import SocketServer, BaseHTTPServer import xmlrpclib import sys import string def elclima(argumentos): pais = string.lower(argumentos[0]) if pais == 'china': respuesta = "china : Humedo" elif pais == 'australia': respuesta = "australia : Nublado" elif pais == 'israel': respuesta = "israel : Terrorismo..." else: respuesta = pais + " no esta disponible , por favor elija entre [china|australia|israel]" return respuesta class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): def do_POST(self): try: # extraer argumentos data = self.rfile.read(int(self.headers["content-length"])) params, method = xmlrpclib.loads(data) # generar respuesta try: response = self.call(method, params) if type(response) != type(()): response = (response,) except: # reportar errores response = xmlrpclib.dumps(xmlrpclib.Fault(1, "%s:%s" % (sys.exc_type, sys.exc_value)) ) else: response = xmlrpclib.dumps( response, methodresponse=1 ) except: # error interno, reportar como error HTTP self.send_response(500) self.end_headers() else: # respuesta valida de HTTP self.send_response(200) self.send_header("Content-type", "text/xml") self.send_header("Content-length", str(len(response))) self.end_headers() self.wfile.write(response) # cerrar conexion self.wfile.flush() self.connection.shutdown(1) def call(self, method, params): if method == "clima.mundial": return elclima(params) else: raise xmlrpclib.Fault(777, "Método no definido en XMLRPC") if __name__ == '__main__': print "Inicializando el Servidor XML-RPC en el puerto 12000..."; print "Aceptando solicitudes (Ctrl-C para terminar el Servidor...realize otra llamada del Cliente para finalizar)" server = SocketServer.TCPServer(('', 12000), RequestHandler) server.serve_forever() |
El primer paso es declarar las librerías que serán utilizadas por el Servidor XMLRPC.
Se define el método elclima
que será utilizado para responder a las requisiciones del Cliente.
La clase RequestHandler
contiene código empleado para redireccionar las solicitudes que arriben al Cliente.
El último método dentro de esta clase es el que redirecciona las solicitudes hacia el método elclima
.
La sección final despliega mensajes a pantalla .
template
, XPath, Condicionales y Ciclos en XSL.