[英]How can i customize xmlrpc response and request in python
這是我的xmlrpc服務器python代碼。我想更改響應。
from SimpleXMLRPCServer import SimpleXMLRPCServer
import logger
import db_connect
# Set up logging
logger.Logger(name="rpc", address="rpc.log")
server = SimpleXMLRPCServer(('0.0.0.0', 4242), logRequests=True)
# Expose a function
def get_status(extension):
status=db_connect.get_status(extension)
logger.logger().info(" extension number %s Found %s
",extension,status )
return status
server.register_function(get_status)
try:
print ('Use Control-C to exit')
server.serve_forever()
except KeyboardInterrupt:
print ('Exiting')
Xml rpc服務器向客戶端返回以下響應。
<?xml version='1.0'?>
<methodResponse>
<params>
<param>
<value><boolean>0</boolean></value>
</param>
</params>
</methodResponse>
是否可以返回如下所示的自定義響應?
<?xml version='1.0'?>
<Status>
<Extension>605</Extension>
<Bite_Status>Operational Fault</Bite_Status>
<Iridium_Channels_Available>0</Iridium_Channels_Available>
<DND_State>Disabled</DND_State>
<DND_Override>Disabled</DND_Override>
<Mute_State>Disabled</Mute_State>
</Status>
還想更改http標頭響應狀態代碼。
如果要從xmlrpc服務器返回多個可能嵌套的元素,請讓函數返回一個字典:
def status(ext):
status = {
'Extension': 605,
'Bite_Status': 'Operational Fault',
'Iridium_Channels_Available': 0,
'DND_State': 'Disabled',
'DND_Override': 'Disabled',
'Mute_State': 'Disabled'
}
return status
server.register_function(status)
這將返回下面的xml; 它比您的示例更冗長,因為它必須符合xmlrpc規范。 如果您使用標准庫的ServerProxy作為客戶端,則xml將轉換為與服務器函數生成的字典相同的字典。
<?xml version='1.0'?>
<methodResponse>
<params>
<param>
<value><struct>
<member>
<name>Extension</name>
<value><int>605</int></value>
</member>
<member>
<name>Bite_Status</name>
<value><string>Operational Fault</string></value>
</member>
<member>
<name>Iridium_Channels_Available</name>
<value><int>0</int></value>
</member>
<member>
<name>DND_State</name>
<value><string>Disabled</string></value>
</member>
<member>
<name>DND_Override</name>
<value><string>Disabled</string></value>
</member>
<member>
<name>Mute_State</name>
<value><string>Disabled</string></value>
</member>
</struct></value>
</param>
</params>
</methodResponse>
狀態代碼在服務器實現中進行了硬編碼 ,因此除非您編寫自己的服務器,否則無法更改。 還要注意, xlmrpc規范要求返回碼為200才能成功響應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.