Python Web 服务开发者: 针对 Python 的 XML-RPC
2007-03-29 12:24:08 来源:WEB开发网核心提示: result = eg_obj.stringecho(u"Freude,schönergötterfunken".encode("utf-7"))结果是:$ python stringecho.pyFreude, sch+APY-
result = eg_obj.stringecho(u"Freude,schönergötterfunken".encode("utf-7"))
结果是:
$ python stringecho.py
Freude, sch+APY-ne g+APY-tterfunken
很遗憾,这个方案也行不通,因为它会篡改被远程发送的值,并要求允许各方之间进行带外传输,而这种情况下字符串是 UTF-7 编码的。如果可以在各方之间建立这种通信,那么服务器就还可以接受二进制对象而不是字符串,这意味着可以使用 UTF-8。但这只是在逃避协议本身的一个明显的问题,或许这也是考虑使用 SOAP 的一个很好的理由,因为 SOAP 已经完全国际化了。
错误处理
当服务器需要发出错误信号时,它使用 XML-RPC 的 fault 对象来执行。在 Python 中,这是通过使用一个特殊的异常对象来解释的,该对象会给出一个错误码和一段描述性字符串。 清单 3(getstate.py)使用一个 XML-RPC 服务来根据传进来的数字返回状态名称,该数字代表按字母排序的状态的索引。我们故意使用一个假值 -1,这个值会导致服务器发生错误:
清单 3(getstate.py):故意引发错误的 XML-RPC 客户机
import xmlrpclib
server = xmlrpclib.ServerProxy("http://xmlrpc.usefulinc.com/demo/server.php")
eg_obj = server.examples
try:
result = eg_obj.getStateName(-1)
except xmlrpclib.Fault, fault:
print fault.faultCode
print fault.faultString
运行结果是:
$ python getstate.py
800
I don't have a state for the index '-1'
如果是 XML-RPC 工具而不是服务本身遇到了问题(例如,您给它提供了一个无法到达的 URL),那么将产生一个 ProtocolError 异常对象而不是 Fault 对象。
更多精彩
赞助商链接