2015-06-24 3 views
0

У меня возникла странная проблема с XML-RPC.PHP код возврата/ошибки сервера XML-RPC не отображается в клиенте Perl XML-RPC

Мне нужно использовать существующий коммерческий API XML-RPC, написанный на PHP (крайне плохо, я должен добавить, с ужасной документацией), из сценария Perl. Я попытался все XML-RPC модули Perl я мог найти (Frontier::Client, XML::RPC, RPC::XML), но в целом это происходит:

  • Когда мой вызов успешен, я получаю результат, ничего плохого.

  • Когда это не так (по какой-либо причине - неудачная аутентификация, отсутствующие/неправильные параметры), я ничего не получаю. Пустой ответ (при использовании Frontier :: Client, он говорит 500 Internal Server Error) без кода ошибки/сообщения.

  • Но когда я использую тестовый файл PHP, поставщик отправил мне коммерческий API, используя те же методы и параметры, я получаю код ответа и ответное сообщение (редко полезно, но тем не менее).

Что может быть объяснением этого? Библиотека, которую они используют на стороне сервера, выводит ошибки каким-то странным образом? (Примечание: я думаю, что они используют xmlrpc-2.2.2, по крайней мере, это то, что используется на стороне клиента в тестовом PHP-файле). Это пример ответа XML с ошибкой, которую я получаю от клиента PHP.

<?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&apos;adresse email de validation</string> 
              </value> 
             </member> 
            </struct> 
           </value> 
          </member> 
         </struct> 
        </value> 
       </member> 
      </struct> 
     </value> 
     </param> 
    </params> 
</methodResponse> 

Это по-французски, но вы получите суть. Почему это правильно отображается в PHP, но не в моем скрипте Perl, какую бы библиотеку я не использовал? И есть ли способ исправить это, не сообщив поставщику API правильно переписать свой код?

+0

Нам нужно будет увидеть какой-нибудь код, чтобы иметь возможность ответить, я думаю. – Sobrique

+0

Можете ли вы получить необработанный XML из API? – Sobrique

+0

Как я пытался указать, код не имеет значения. У меня нет доступа к коду API, а мой - не что иное, как простые методы вызова (из трех разных модулей). Что касается тестового PHP-скрипта, он также содержит простейшее возможное объявление клиента, привязку параметров и вызов. Выходной XML из обоих сценариев почти идентичен (несколько символов новой строки больше в PHP-сгенерированном XML, но я действительно не думаю, что это важно) –

ответ

0

Хорошо, получается, что сервер XML-RPC довольно придирчив и требует работы множества заголовков и файлов cookie (большинство из которых бесполезны), иначе он просто ничего не выводит.