【发布时间】:2015-09-10 11:53:02
【问题描述】:
我在使用 XML-RPC 时遇到了一个奇怪的问题。
我需要从 Perl 脚本使用现有的商业 XML-RPC API,用 PHP 编写(非常糟糕,我必须添加,文档很糟糕)。我已经尝试过所有我能找到的 Perl XML-RPC 模块(Frontier::Client、XML::RPC、RPC::XML),但通常会发生这种情况:
当我调用成功时,我得到结果,没有错。
如果不是(无论出于何种原因 - 身份验证失败、缺少/错误的参数),我什么也得不到。空响应(使用 Frontier::Client 时,显示 500 Internal Server Error),没有任何错误代码/消息。
但是当我使用商业 API 的供应商发送给我的 PHP 测试文件时,使用相同的方法和参数,我得到一个响应代码和一个响应消息(很少有用,但仍然如此)。
对此有何解释?他们在服务器端使用的库以某种奇怪的方式输出错误? (注意:我认为他们使用 xmlrpc-2.2.2,至少这是测试 PHP 文件中客户端使用的内容)。这是我从 PHP 客户端收到的带有错误的示例 XML 响应。
<?xml version="1.0" ?>
<methodResponse>
<params>
<param>
<value>
<struct>
<member>
<name>demande</name>
<value>
<struct>
<member>
<name>0</name>
<value>
<struct>
<member>
<name>codeReponse</name>
<value>
<int>-28</int>
</value>
</member>
<member>
<name>messageReponse</name>
<value>
<string>Verifiez l'adresse email de validation</string>
</value>
</member>
</struct>
</value>
</member>
</struct>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodResponse>
它是法语的,但你会明白要点。为什么它在 PHP 中正确显示,但在我的 Perl 脚本中却没有,无论我使用什么库?有什么办法可以解决这个问题,而不告诉 API 的供应商正确地重写他们的代码?
【问题讨论】:
-
我认为我们需要查看一些代码才能有机会回答。
-
你能从 API 中获取原始 XML 吗?
-
正如我试图指出的那样,代码有点无关紧要。我无法访问 API 的代码,而我的只是简单的调用方法(来自三个不同的模块)。至于测试 PHP 脚本,它还包含最简单的客户端声明、参数绑定和调用。两个脚本的输出 XML 几乎相同(PHP 生成的 XML 中多了几个换行符,但我真的不认为这很重要)
-
此外,我尝试使用 CURL 发布 PHP 脚本(有效)输出的数据,但仍然没有运气 - 空响应。