【问题标题】:Perl XML-RPC output format/schemaPerl XML-RPC 输出格式/模式
【发布时间】:2015-09-04 05:30:32
【问题描述】:

我正在用 Perl 编写一个脚本来使用两个 XML-RPC API。其中一个工作正常,另一个我总是得到一个空的结果。 在联系了第二个 API 的供应商后,他们给我发了一个 PHP 示例脚本来操作 API。我在设置中找不到任何差异,所以经过一些调试后,我发现发送的 XML 存在一些差异\ns:

<?xml version="1.0"?>
<methodCall>
<methodName>solde</methodName>
<params>
<param><value><struct>
<member><name>utilisateur</name><value><string>user</string></value></member>
<member><name>motDePasse</name><value><string>pass</string></value></member>
</struct></value>
</param>
</params>
</methodCall>

这是由 Perl 脚本发送的(我尝试过使用 XML::RPC、Frontier::Client、RPC::XML - 无论如何都没有运气)。 PHP 脚本(有效的)发送这个:

<?xml version="1.0"?>
<methodCall>
<methodName>solde</methodName>
<params>
<param>
<value><struct>
<member><name>identification</name>
<value><struct>
<member><name>utilisateur</name>
<value><string>user</string></value>
</member>
<member><name>motdePasse</name>
<value><string>pass</string></value>
</member>
</struct></value>
</member>
</struct></value>
</param>
</params>
</methodCall>

我看到的两者之间的唯一区别是一些换行符。我已经使用两个 XML 发送了带有 curl 的 POST 请求,如果 #1 我没有得到任何结果,如果 #2 它可以工作。 显然,第二个 API(用 PHP btw 编写)的实现更加自命不凡(提醒 - 在 API #1 中它适用于第一个 XML,API #2 - 没有结果)。

除了自己生成 XML 之外,我还能做些什么来解决这个问题?有没有办法告诉任何现有的 Perl XML-RPC 库以服务器喜欢的方式格式化 XML?

【问题讨论】:

    标签: php xml perl rpc xml-rpc


    【解决方案1】:

    您自己的 XML 完全不同。参数内容正确

    <value>
      <struct>
        <member>
          <name>utilisateur</name>
          <value>
            <string>user</string>
          </value>
        </member>
        <member>
          <name>motdePasse</name>
          <value>
            <string>pass</string>
          </value>
        </member>
      </struct>
    </value>
    

    但 PHP 代码发送的版本将其包装在一个命名结构中,像这样

    <value>
      <struct>
        <member>
          <name>identification</name>
    
    
          <value>
            <struct>
              <member>
                <name>utilisateur</name>
                <value>
                  <string>user</string>
                </value>
              </member>
              <member>
                <name>motdePasse</name>
                <value>
                  <string>pass</string>
                </value>
              </member>
            </struct>
          </value>
    
    
        </member>
      </struct>
    </value>
    

    希望对你有帮助

    【讨论】:

    • 哇,我完全错过了!谢谢,就是这样,现在可以了。
    • 好 - 我真的希望换行不会破坏 XML,因为如果它破坏了,它就不是 XML。
    • @Sobrique:这不是真的。由应用程序决定如何处理 XML 文档中的空白文本。 XML 解析器必须传递所有空白文本元素
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2020-06-15
    • 2016-05-19
    相关资源
    最近更新 更多