【问题标题】:How to send a xml-rpc request in python?如何在 python 中发送 xml-rpc 请求?
【发布时间】:2011-01-15 13:51:35
【问题描述】:

我只是想知道,如何在 python 中发送xml-rpc 请求?我知道你可以使用xmlrpclib,但是如何在xml 中发送请求以访问功能?

我想查看xml 的回复。

所以基本上我想将以下内容作为我的请求发送到服务器:

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

然后得到响应

【问题讨论】:

    标签: python xml-rpc


    【解决方案1】:

    我已将xmlrpc.client 中的源代码缩减为发送 xml rpc 请求所需的最低限度(因为我有兴趣尝试移植该功能)。它返回响应 XML。

    服务器:

    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() 
    

    客户:

    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())
    

    【讨论】:

      【解决方案2】:

      您所说的“四处走动”是什么意思? xmlrpclib 在 python 中编写 XML-RPC 客户端的常规方法。如果你想知道事情是如何完成的,只需查看the sources(或将它们复制到您自己的模块并添加print 语句!-)。

      【讨论】:

        【解决方案3】:

        这是一个简单的 Python 中的 XML-RPC 客户端:

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

        使用此服务器:

        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()
        

        要访问 xmlrpclib 的内容,即查看原始 XML 请求等,请在文档中查找 xmlrpclib.Transport 类。

        【讨论】:

        • 是的,我有这个工作,但我怎么能简单地使用 xml 发送请求?然后在 xml 中获取响应?
        • @PCBEEF:见Transport 类,正如我在底部所说的。示例在文档中 - 您也可以随时查看引擎盖(来源)
        • 发现在启动客户端时设置verbose=True标志,输出原始请求和响应
        猜你喜欢
        • 2012-02-16
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多