日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
創(chuàng)新互聯(lián)Python教程:xmlrpc.server—-基本XML-RPC服務(wù)器

xmlrpc.server —- 基本 XML-RPC 服務(wù)器

源代碼: Lib/xmlrpc/server.py

成都創(chuàng)新互聯(lián)公司于2013年開(kāi)始,先為平南等服務(wù)建站,平南等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為平南企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。


xmlrpc.server 模塊為以 python 編寫(xiě) XML-RPC 服務(wù)器提供了一個(gè)基本服務(wù)器框架。 服務(wù)器可以是獨(dú)立的,使用 SimpleXMLRPCServer,或是嵌入某個(gè) CGI 環(huán)境中,使用 CGIXMLRPCRequestHandler。

警告

xmlrpc.server 模塊對(duì)于惡意構(gòu)建的數(shù)據(jù)是不安全的。 如果你需要解析不受信任或未經(jīng)身份驗(yàn)證的數(shù)據(jù),請(qǐng)參閱 XML 漏洞。

Availability: not Emscripten, not WASI.

This module does not work or is not available on WebAssembly platforms wasm32-emscripten and wasm32-wasi. See WebAssembly platforms for more information.

class xmlrpc.server.SimpleXMLRPCServer(addr, requestHandler=SimpleXMLRPCRequestHandler, logRequests=True, allow_none=False, encoding=None, bind_and_activate=True, use_builtin_types=False)

創(chuàng)建一個(gè)新的服務(wù)器實(shí)例。 這個(gè)類(lèi)提供了一些用來(lái)注冊(cè)可以被 XML-RPC 協(xié)議所調(diào)用的函數(shù)的方法。 requestHandler 形參應(yīng)該是一個(gè)用于請(qǐng)求處理句柄實(shí)例的工廠函數(shù);它默認(rèn)為 SimpleXMLRPCRequestHandler。 addrrequestHandler 形參會(huì)被傳給 socketserver.TCPServer 構(gòu)造器。 如果 logRequests 為真值(默認(rèn)),請(qǐng)求將被記錄到日志;將此形參設(shè)為假值將關(guān)閉日志記錄。 allow_noneencoding 形參會(huì)被傳給 xmlrpc.client 并控制將從服務(wù)器返回的 XML-RPC 響應(yīng)。 bind_and_activate 形參控制 server_bind()server_activate() 是否會(huì)被構(gòu)造器立即調(diào)用;它默認(rèn)為真值。 將其設(shè)為假值將允許代碼在地址被綁定之前操作 allow_reuse_address 類(lèi)變量。 use_builtin_types 形參會(huì)被傳給 loads() 函數(shù)并控制當(dāng)收到日期/時(shí)間值或二進(jìn)制數(shù)據(jù)時(shí)將處理哪些類(lèi)型;它默認(rèn)為假值。

在 3.3 版更改: 增加了 use_builtin_types 旗標(biāo)。

class xmlrpc.server.CGIXMLRPCRequestHandler(allow_none=False, encoding=None, use_builtin_types=False)

創(chuàng)建一個(gè)新的實(shí)例來(lái)處理 CGI 環(huán)境中的 XML-RPC 請(qǐng)求。 allow_noneencoding 形參會(huì)被傳遞給 xmlrpc.client 并控制將要從服務(wù)器返回的 XML-RPC 響應(yīng)。 use_builtin_types 形參會(huì)被傳遞給 loads() 函數(shù)并控制當(dāng)接收到日期/時(shí)間值或二進(jìn)制數(shù)據(jù)時(shí)要處理哪種類(lèi)型;該形參默認(rèn)為假值。

在 3.3 版更改: 增加了 use_builtin_types 旗標(biāo)。

class xmlrpc.server.SimpleXMLRPCRequestHandler

創(chuàng)建一個(gè)新的請(qǐng)求處理句柄實(shí)例。 該請(qǐng)求處理句柄支持 POST 請(qǐng)求并會(huì)修改日志記錄操作以便使用傳遞給 SimpleXMLRPCServer 構(gòu)造器形參的 logRequests 形參。

SimpleXMLRPCServer 對(duì)象

SimpleXMLRPCServer 類(lèi)是基于 socketserver.TCPServer 并提供了一個(gè)創(chuàng)建簡(jiǎn)單、獨(dú)立的 XML-RPC 服務(wù)器的方式。

SimpleXMLRPCServer.register_function(function=None, name=None)

注冊(cè)一個(gè)可以響應(yīng) XML-RPC 請(qǐng)求的函數(shù)。 如果給出了 name,則它將成為與 function 相關(guān)聯(lián)的方法名,否則將使用 function.__name__。 name 是一個(gè)字符串,并可能包含不可在 Python 標(biāo)識(shí)符中出現(xiàn)的字符,包括句點(diǎn)符。

此方法也可被用作裝飾器。 當(dāng)被用作裝飾器時(shí),name 只能被指定為以 name 注冊(cè)的 function 的一個(gè)關(guān)鍵字參數(shù)。 如果沒(méi)有指定 name,則將使用 function.__name__

在 3.7 版更改: register_function() 可被用作裝飾器。

SimpleXMLRPCServer.register_instance(instance, allow_dotted_names=False)

注冊(cè)一個(gè)被用來(lái)公開(kāi)未使用 register_function() 注冊(cè)的方法名的對(duì)象。 如果 instance 包含 _dispatch() 方法,它將被調(diào)用并附帶被請(qǐng)求的方法名和來(lái)自請(qǐng)求的形參。 它的 API 是 def _dispatch(self, method, params) (請(qǐng)注意 params 并不表示變量參數(shù)列表)。 如果它調(diào)用了一個(gè)下層函數(shù)來(lái)執(zhí)行任務(wù),該函數(shù)將以 func(*params) 的形式被調(diào)用,即擴(kuò)展了形參列表。 來(lái)自 _dispatch() 的返回值將作為結(jié)果被返回給客戶(hù)端。 如果 instance 不包含 _dispatch() 方法,則會(huì)在其中搜索與被請(qǐng)求的方法名相匹配的屬性。

如果可選的 allow_dotted_names 參數(shù)為真值且該實(shí)例沒(méi)有 _dispatch() 方法,則如果被請(qǐng)求的方法名包含句點(diǎn)符,會(huì)單獨(dú)搜索該方法名的每個(gè)組成部分,其效果就是執(zhí)行了簡(jiǎn)單的分層級(jí)搜索。 通過(guò)搜索找到的值將隨即附帶來(lái)自請(qǐng)求的形參被調(diào)用,并且返回值會(huì)被回傳給客戶(hù)端。

警告

啟用 allow_dotted_names 選項(xiàng)將允許入侵者訪(fǎng)問(wèn)你的模塊的全局變量并可能允許入侵者在你的機(jī)器上執(zhí)行任意代碼。 僅可在安全、封閉的網(wǎng)絡(luò)中使用此選項(xiàng)。

SimpleXMLRPCServer.register_introspection_functions()

注冊(cè) XML-RPC 內(nèi)省函數(shù) system.listMethods, system.methodHelpsystem.methodSignature。

SimpleXMLRPCServer.register_multicall_functions()

注冊(cè) XML-RPC 多調(diào)用函數(shù) system.multicall。

SimpleXMLRPCRequestHandler.rpc_paths

一個(gè)必須為元組類(lèi)型的屬性值,其中列出所接收 XML-RPC 請(qǐng)求的有效路徑部分。 發(fā)送到其他路徑的請(qǐng)求將導(dǎo)致 404 “no such page” HTTP 錯(cuò)誤。 如果此元組為空,則所有路徑都將被視為有效。 默認(rèn)值為 ('/', '/RPC2')。

SimpleXMLRPCServer 示例

服務(wù)器端代碼:

 
 
 
 
  1. from xmlrpc.server import SimpleXMLRPCServer
  2. from xmlrpc.server import SimpleXMLRPCRequestHandler
  3. # Restrict to a particular path.
  4. class RequestHandler(SimpleXMLRPCRequestHandler):
  5. rpc_paths = ('/RPC2',)
  6. # Create server
  7. with SimpleXMLRPCServer(('localhost', 8000),
  8. requestHandler=RequestHandler) as server:
  9. server.register_introspection_functions()
  10. # Register pow() function; this will use the value of
  11. # pow.__name__ as the name, which is just 'pow'.
  12. server.register_function(pow)
  13. # Register a function under a different name
  14. def adder_function(x, y):
  15. return x + y
  16. server.register_function(adder_function, 'add')
  17. # Register an instance; all the methods of the instance are
  18. # published as XML-RPC methods (in this case, just 'mul').
  19. class MyFuncs:
  20. def mul(self, x, y):
  21. return x * y
  22. server.register_instance(MyFuncs())
  23. # Run the server's main loop
  24. server.serve_forever()

以下客戶(hù)端代碼將調(diào)用上述服務(wù)器所提供的方法:

 
 
 
 
  1. import xmlrpc.client
  2. s = xmlrpc.client.ServerProxy('http://localhost:8000')
  3. print(s.pow(2,3)) # Returns 2**3 = 8
  4. print(s.add(2,3)) # Returns 5
  5. print(s.mul(5,2)) # Returns 5*2 = 10
  6. # Print list of available methods
  7. print(s.system.listMethods())

register_function() 也可被用作裝飾器。 上述服務(wù)器端示例可以通過(guò)裝飾器方式來(lái)注冊(cè)函數(shù):

 
 
 
 
  1. from xmlrpc.server import SimpleXMLRPCServer
  2. from xmlrpc.server import SimpleXMLRPCRequestHandler
  3. class RequestHandler(SimpleXMLRPCRequestHandler):
  4. rpc_paths = ('/RPC2',)
  5. with SimpleXMLRPCServer(('localhost', 8000),
  6. requestHandler=RequestHandler) as server:
  7. server.register_introspection_functions()
  8. # Register pow() function; this will use the value of
  9. # pow.__name__ as the name, which is just 'pow'.
  10. server.register_function(pow)
  11. # Register a function under a different name, using
  12. # register_function as a decorator. *name* can only be given
  13. # as a keyword argument.
  14. @server.register_function(name='add')
  15. def adder_function(x, y):
  16. return x + y
  17. # Register a function under function.__name__.
  18. @server.register_function
  19. def mul(x, y):
  20. return x * y
  21. server.serve_forever()

以下包括在 Lib/xmlrpc/server.py 模塊中的例子演示了一個(gè)允許帶點(diǎn)號(hào)名稱(chēng)并注冊(cè)有多調(diào)用函數(shù)的服務(wù)器。

警告

啟用 allow_dotted_names 選項(xiàng)將允許入侵者訪(fǎng)問(wèn)你的模塊的全局變量并可能允許入侵者在你的機(jī)器上執(zhí)行任意代碼。 僅可在安全、封閉的網(wǎng)絡(luò)中使用此示例。

 
 
 
 
  1. import datetime
  2. class ExampleService:
  3. def getData(self):
  4. return '42'
  5. class currentTime:
  6. @staticmethod
  7. def getCurrentTime():
  8. return datetime.datetime.now()
  9. with SimpleXMLRPCServer(("localhost", 8000)) as server:
  10. server.register_function(pow)
  11. server.register_function(lambda x,y: x+y, 'add')
  12. server.register_instance(ExampleService(), allow_dotted_names=True)
  13. server.register_multicall_functions()
  14. print('Serving XML-RPC on localhost port 8000')
  15. try:
  16. server.serve_forever()
  17. except KeyboardInterrupt:
  18. print("\nKeyboard interrupt received, exiting.")
  19. sys.exit(0)

這個(gè) ExampleService 演示程序可通過(guò)命令行發(fā)起調(diào)用:

 
 
 
 
  1. python -m xmlrpc.server

The client that interacts with the above server is included in Lib/xmlrpc/client.py:

 
 
 
 
  1. server = ServerProxy("http://localhost:8000")
  2. try:
  3. print(server.currentTime.getCurrentTime())
  4. except Error as v:
  5. print("ERROR", v)
  6. multi = MultiCall(server)
  7. multi.getData()
  8. multi.pow(2,9)
  9. multi.add(1,2)
  10. try:
  11. for response in multi():
  12. print(response)
  13. except Error as v:
  14. print("ERROR", v)

這個(gè)可與示例 XMLRPC 服務(wù)器進(jìn)行交互的客戶(hù)端的啟動(dòng)方式如下:

 
 
 
 
  1. python -m xmlrpc.client

CGIXMLRPCRequestHandler

CGIXMLRPCRequestHandler 類(lèi)可被用來(lái)處理發(fā)送給 Python CGI 腳本的 XML-RPC 請(qǐng)求。

CGIXMLRPCRequestHandler.register_function(function=None, name=None)

注冊(cè)一個(gè)可以響應(yīng) XML-RPC 請(qǐng)求的函數(shù)。 如果給出了 name,則它將成為與 function 相關(guān)聯(lián)的方法名,否則將使用 function.__name__。 name 是一個(gè)字符串,并可能包含不可在 Python 標(biāo)識(shí)符中出現(xiàn)的字符,包括句點(diǎn)符。

此方法也可被用作裝飾器。 當(dāng)被用作裝飾器時(shí),name 只能被指定為以 name 注冊(cè)的 function 的一個(gè)關(guān)鍵字參數(shù)。 如果沒(méi)有指定 name,則將使用 function.__name__。

在 3.7 版更改: register_function() 可被用作裝飾器。

CGIXMLRPCRequestHandler.register_instance(instance)

注冊(cè)一個(gè)對(duì)象用來(lái)公開(kāi)未使用 register_function() 進(jìn)行注冊(cè)的方法名。 如果實(shí)例包含 _dispatch() 方法,它會(huì)附帶所請(qǐng)求的方法名和來(lái)自請(qǐng)求的形參被調(diào)用;返回值會(huì)作為結(jié)果被返回給客戶(hù)端。 如果實(shí)例不包含 _dispatch() 方法,則在其中搜索與所請(qǐng)求方法名相匹配的屬性;如果所請(qǐng)求方法名包含句點(diǎn),則會(huì)分別搜索方法名的每個(gè)部分,其效果就是執(zhí)行了簡(jiǎn)單的層級(jí)搜索。 搜索找到的值將附帶來(lái)自請(qǐng)求的形參被調(diào)用,其返回值會(huì)被返回給客戶(hù)端。

CGIXMLRPCRequestHandler.register_introspection_functions()

注冊(cè) XML-RPC 內(nèi)海函數(shù) system.listMethods, system.methodHelpsystem.methodSignature

CGIXMLRPCRequestHandler.register_multicall_functions()

注冊(cè) XML-RPC 多調(diào)用函數(shù) system.multicall。

CGIXMLRPCRequestHandler.handle_request(request_text=None)

處理一個(gè) XML-RPC 請(qǐng)求。 如果給出了 request_text,它應(yīng)當(dāng)是 HTTP 服務(wù)器所提供的 POST 數(shù)據(jù),否則將使用 stdin 的內(nèi)容。

示例:

 
 
 
 
  1. class MyFuncs:
  2. def mul(self, x, y):
  3. return x * y
  4. handler = CGIXMLRPCRequestHandler()
  5. handler.register_function(pow)
  6. handler.register_function(lambda x,y: x+y, 'add')
  7. handler.register_introspection_functions()
  8. handler.register_instance(MyFuncs())
  9. handler.handle_request()

文檔 XMLRPC 服務(wù)器

這些類(lèi)擴(kuò)展了上面的類(lèi)以發(fā)布響應(yīng) HTTP GET 請(qǐng)求的 HTML 文檔。 服務(wù)器可以是獨(dú)立的,使用 DocXMLRPCServer,或是嵌入某個(gè) CGI 環(huán)境中,使用 DocCGIXMLRPCRequestHandler。

class xmlrpc.server.DocXMLRPCServer(addr, requestHandler=DocXMLRPCRequestHandler, logRequests=True, allow_none=False, encoding=None, bind_and_activate=True, use_builtin_types=True)

創(chuàng)建一個(gè)新的服務(wù)器實(shí)例。 所有形參的含義與 SimpleXMLRPCServer 的相同;requestHandler 默認(rèn)為 DocXMLRPCRequestHandler。

在 3.3 版更改: 增加了 use_builtin_types 旗標(biāo)。

class xmlrpc.server.DocCGIXMLRPCRequestHandler

創(chuàng)建一個(gè)新的實(shí)例來(lái)處理 CGI 環(huán)境中的 XML-RPC 請(qǐng)求。

class xmlrpc.server.DocXMLRPCRequestHandler

創(chuàng)建一個(gè)新的請(qǐng)求處理句柄實(shí)例。 該請(qǐng)求處理句柄支持 XML-RPC POST 請(qǐng)求、文檔 GET 請(qǐng)求并會(huì)修改日志記錄操作以便使用傳遞給 DocXMLRPCServer 構(gòu)造器形參的 logRequests 形參。

DocXMLRPCServer 對(duì)象

DocXMLRPCServer 類(lèi)派生自 SimpleXMLRPCServer 并提供了一種創(chuàng)建自動(dòng)記錄文檔的、獨(dú)立的 XML-RPC 服務(wù)器的方式。 HTTP POST 請(qǐng)求將作為 XML-RPC 方法調(diào)用來(lái)處理。 HTTP GET 請(qǐng)求將通過(guò)生成 pydoc 風(fēng)格的 HTML 文檔來(lái)處理。 這將允許服務(wù)器自己提供基于 Web 的文檔。

DocXMLRPCServer.set_server_title(server_title)

設(shè)置所生成 HTML 文檔要使用的標(biāo)題。 此標(biāo)題將在 HTML “title” 元素中使用。

DocXMLRPCServer.set_server_name(server_name)

設(shè)置所生成 HTML 文檔要使用的名稱(chēng)。 此名稱(chēng)將出現(xiàn)在所生成文檔頂部的 “h1” 元素中。

DocXMLRPCServer.set_server_documentation(server_documentation)

設(shè)置所生成Set the description used in the generated HTML 文檔要使用的描述。 此描述將顯示為文檔中的一個(gè)段落,位于服務(wù)器名稱(chēng)之下。

DocCGIXMLRPCRequestHandler

DocCGIXMLRPCRequestHandler 類(lèi)派生自 CGIXMLRPCRequestHandler 并提供了一種創(chuàng)建自動(dòng)記錄文檔的 XML-RPC CGI 腳本的方式。 HTTP POST 請(qǐng)求將作為 XML-RPC 方法調(diào)用來(lái)處理。 HTTP GET 請(qǐng)求將通過(guò)生成 pydoc 風(fēng)格的 HTML 文檔來(lái)處理。 這將允許服務(wù)器自己提供基于 Web 的文檔。

DocCGIXMLRPCRequestHandler.set_server_title(server_title)

設(shè)置所生成 HTML 文檔要使用的標(biāo)題。 此標(biāo)題將在 HTML “title” 元素中使用。

DocCGIXMLRPCRequestHandler.set_server_name(server_name)

設(shè)置所生成 HTML 文檔要使用的名稱(chēng)。 此名稱(chēng)將出現(xiàn)在所生成文檔頂部的 “h1” 元素中。

DocCGIXMLRPCRequestHandler.set_server_documentation(server_documentation)

設(shè)置所生成Set the description used in the generated HTML 文檔要使用的描述。 此描述將顯示為文檔中的一個(gè)段落,位于服務(wù)器名稱(chēng)之下。


分享標(biāo)題:創(chuàng)新互聯(lián)Python教程:xmlrpc.server—-基本XML-RPC服務(wù)器
網(wǎng)頁(yè)URL:http://www.dlmjj.cn/article/ccdgooj.html