Cómo enviar un xml-rpc solicitud en python?

Me preguntaba, ¿cómo iba yo a ser capaz de enviar un xml-rpc solicitud en python? Sé que usted puede utilizar xmlrpclib, pero ¿cómo puedo enviar una solicitud en xml para acceder a una función?

Me gustaría ver la xml respuesta.

Así que, básicamente, me gustaría enviar a la siguiente como mi solicitud para el servidor:

<?xml version="1.0"?>
<methodCall>
  <methodName>print</methodName>
  <params>
    <param>
        <value><string>Hello World!</string></value>
    </param>
  </params>
</methodCall>

y obtener la respuesta

OriginalEl autor John Jiang | 2010-02-11

3 Kommentare

  1. 12

    Aquí es un simple XML-RPC del cliente en Python:

    import xmlrpclib
    
    s = xmlrpclib.ServerProxy('http://localhost:8000')
    print s.myfunction(2, 4)

    Trabaja con este servidor:

    from SimpleXMLRPCServer import SimpleXMLRPCServer
    from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler
    
    # Restrict to a particular path.
    class RequestHandler(SimpleXMLRPCRequestHandler):
        rpc_paths = ('/RPC2',)
    
    # Create server
    server = SimpleXMLRPCServer(("localhost", 8000),
                                requestHandler=RequestHandler)
    
    def myfunction(x, y):
        status = 1
        result = [5, 6, [4, 5]]
        return (status, result)
    server.register_function(myfunction)
    
    # Run the server's main loop
    server.serve_forever()

    Para acceder a las entrañas de xmlrpclib, es decir, mirando el XML sin procesar solicitudes y así sucesivamente, buscar el xmlrpclib.Transport clase en la documentación.

    Sí, tengo que trabajar, pero ¿cómo iba yo a ser capaz de enviar una solicitud simplemente mediante el uso de xml? Y a continuación, obtener la respuesta en xml?
    ver el Transport clase, como dije en la parte inferior. Ejemplos se encuentran en la documentación – y usted también puede mirar bajo el capó (las fuentes)
    Se encontró que la configuración de la verbose=True bandera cuando se inicia el cliente, salidas de las primas de solicitud y respuesta

    OriginalEl autor Eli Bendersky

  2. 3

    He redujo el código fuente en xmlrpc.cliente a un mínimo requerido para enviar un xml de solicitud rpc (como yo estaba interesado en tratar de puerto de la funcionalidad). Devuelve el XML de respuesta.

    Servidor:

    from xmlrpc.server import SimpleXMLRPCServer
    
    def is_even(n):
        return n%2 == 0
    
    server = SimpleXMLRPCServer(("localhost", 8000))
    print("Listening on port 8000...")
    server.register_function(is_even, "is_even")
    server.serve_forever() 

    Cliente:

    import http.client
    
    request_body = b"<?xml version='1.0'?>\n<methodCall>\n<methodName>is_even</methodName>\n<params>\n<param>\n<value><int>2</int></value>\n</param>\n</params>\n</methodCall>\n"
    
    connection = http.client.HTTPConnection('localhost:8000')
    connection.putrequest('POST', '/')
    connection.putheader('Content-Type', 'text/xml')
    connection.putheader('User-Agent', 'Python-xmlrpc/3.5')
    connection.putheader("Content-Length", str(len(request_body)))
    connection.endheaders(request_body)
    
    print(connection.getresponse().read())

    OriginalEl autor Nicholas Clarke

  3. 1

    ¿Qué quieres decir con «get around»? xmlrpclib es el forma normal de escribir un XML-RPC del cliente en python. Basta con mirar a las fuentes (o copia de ellos a su propio módulo y agregar print declaraciones!-) si quieres saber los detalles de cómo se hacen las cosas.

    OriginalEl autor Alex Martelli

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea