2015-06-18 1 views
0

Я пишу скрипт в Perl для использования двух API XML-RPC. С одним из них он работает отлично, а другой я всегда получаю пустой результат. После обращения к поставщику второго API они прислали мне сценарий образца PHP для работы с API. Я не мог найти какое-либо различия в настройке, так что после некоторого debbuging я обнаружил, что XML послал отличается несколько \ нс:Perl XML-RPC формат/схема вывода

<?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> 

Единственное различие между ними я вижу несколько новой строки. Я отправил POST-запросы с завихрением с двумя XML-файлами, а в случае № 1 я не получил результата, в случае №2 он работает. Очевидно, что реализация второго API (написанная на PHP btw) более претенциозна (напоминание - в API # 1 она работает с первым XML, API # 2 - без результата).

Что я могу сделать, помимо создания самого XML, для решения этой проблемы? Есть ли способ рассказать любой из существующих библиотек Perl XML-RPC для форматирования XML таким образом, чтобы серверу это понравилось?

ответ

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> 

но версия посланный код РНР это завернутые в имени структуры, как этот

<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> 

Я надеюсь, что это помогает

+0

Wow, я имел полностью пропустил это! Спасибо, вот и все, теперь это работает. –

+0

Хорошо - я действительно надеюсь, что переводы строк не сломают XML, потому что, если это так, это не XML. – Sobrique

+0

@Sobrique: Это неправда. Решать, как обрабатывать пробельный текст в XML-документах, зависит от приложения. Парсеры XML обязаны передавать все текстовые элементы пробелов – Borodin