Python XMLRPC:客户端处理任意例外
题
我正在尝试将任意异常从XMLRPC服务器传递给客户端(两个python脚本,双方都定义了异常类型)。有一个模范的客户端实现 激活食谱 解析返回的“故障串”,将其与已知异常列表进行比较,如果发现,则提出了例外(而不是将其包装在 xmlrpclib.Fault
).
XMLRPC异常响应的示例:
<?xml version='1.0'?>
<methodResponse>
<fault>
<value>
<struct>
<member>
<name>faultCode</name>
<value>
<int>1</int>
</value>
</member>
<member>
<name>faultString</name>
<value>
<string>ValueError:</string>
</value>
</member>
</struct>
</value>
</fault>
</methodResponse>
激活配方将“ valueerror:”字符串和比较“ valueerror”与 ValueError.__name__
(在 allowed_errors = [ValueError, TypeError]
, ,参见。上面的链接)。
可以通过吗 全部 这样的例外,IE会自动提出任何例外(源自 Exception
还是客户端(在服务器上抬起之后)上的其他一些基类)?
激活脚本有效,但我不想注册每个例外 可以 被扔 allowed_errors
).
(奖励问题:除了XMLRPC可以正确处理此问题外,还有其他技术吗?PYRO?)
解决方案
你可以填充 allowed_errors
列表 __builtins__
:
[exc for exc in __builtins__ if isinstance(exc, BaseException)]
这将处理常见的情况,对于内置的例外 ValueError
, TypeError
, OSError
, 等等。您可能会做一些更先进的事情,例如Pyyaml和Pickle,在那里他们会自动寻找发送的任何引用的例外,但这使您对恶意攻击打开了自己的攻击。
如果您想要一种客户/服务器透明度,这些客户端/服务器透明度会自动从客户端上的服务器提高异常,那么Pyro可能是比XML-RPC更好的选择。
不隶属于 StackOverflow