Menú Curso XML,XSL,XMLRPC/SOAP : Código Fuente ServicioClima utilizado como Servidor Python en XMLRPC

(Anterior) Diseño con XMLRPC.

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

Código Fuente ServicioClima Servidor Python en XMLRPC

#!/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 .

Terminos Legales de Contenido ©2000-2011 Osmosis Latina

Diseñado bajo estándares : XHTML   CSS  

webmaster@osmosislatina.com