2010-02-11 33 views
5

Tôi đã tự hỏi, làm thế nào tôi có thể gửi một yêu cầu xml-rpc trong python? Tôi biết bạn có thể sử dụng xmlrpclib, nhưng làm cách nào để gửi yêu cầu ở số xml để truy cập chức năng?Cách gửi yêu cầu xml-rpc trong python?

Tôi muốn xem câu trả lời xml.

Vì vậy, về cơ bản tôi xin gửi đến sau khi yêu cầu của tôi đến máy chủ:

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

và lấy lại phản ứng

Trả lời

11

Dưới đây là một đơn giản khách hàng XML-RPC bằng Python:

import xmlrpclib 

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

Làm việc với máy chủ này:

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

Để truy cập vào đường ruột của xmlrpclib, tức là xem xét các yêu cầu XML thô và v.v., hãy tra cứu lớp xmlrpclib.Transport trong tài liệu.

+0

Vâng, tôi có mà làm việc, nhưng làm thế nào tôi sẽ có thể gửi một yêu cầu đơn giản bằng cách sử dụng xml? Và sau đó nhận được phản hồi trở lại trong xml? –

+0

@PCBEEF: xem lớp 'Transport', như tôi đã nói ở dưới cùng. Ví dụ có trong tài liệu - và bạn cũng luôn có thể xem dưới mui xe (các nguồn) –

+0

Tìm thấy rằng thiết lập verbose = Đúng cờ khi khởi tạo máy khách, đưa ra yêu cầu và phản hồi thô –

1

Bạn có ý gì khi "đi lại"? xmlrpclib cách thông thường để viết ứng dụng XML-RPC trong python. Chỉ cần nhìn vào số the sources (hoặc sao chép chúng vào mô-đun của riêng bạn và thêm print câu lệnh! -) nếu bạn muốn biết chi tiết về cách mọi việc được thực hiện.

2

Tôi đã bỏ bớt mã nguồn ở mức xmlrpc.client đến mức tối thiểu bắt buộc để gửi yêu cầu rpc xml (vì tôi đã quan tâm đến việc cố gắng chuyển chức năng). Nó trả về XML phản hồi.

Server:

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

Chủ đầu tư:

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()) 
Các vấn đề liên quan