2013-08-29 2 views
1

В последнее время я занимаюсь некоторым PHP для подключения к серверу EPP. Когда я отправить XML на сервер EPP через переменную, напримерОшибка 2001 при использовании simplexml_loadfile для отправки XML

$nxml ='<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 
epp-1.0.xsd"> 
<command> 
<login> 
<clID>XXXX</clID> 
<pw>XXXX<pw> 
<options> 
<version>1.0</version> 
<lang>en</lang> 
</options> 
<svcs> 
<objURI>urn:ietf:params:xml:ns:host-1.0</objURI> 
<objURI>urn:ietf:params:xml:ns:contact-1.0</objURI> 
<objURI>urn:ietf:params:xml:ns:domain-1.0</objURI> 
</svcs> 
</login> 
<clTRID>nick-12345</clTRID> 
</command> 
</epp>'; 

Сервер respondes отлично с правильным XML. Хотя теперь, когда я пытаюсь передать через XML simplexml_loadfile как этот

$nxml = simplexml_load_file('login.xml'); 

Я получаю ответ от сервера

<response> 
    <result code="2001"> 
     <msg lang="en">Command syntax error</msg> 
    </result> 
    <extension> 
     <extcommon:resdata xmlns:extcommon="urn:ics-forth:params:xml:ns:extcommon-1.0" xsi:schemalocation="urn:ics-forth:params:xml:ns:extcommon-1.0 extcommon-1.0.xsd"> 
    </extension> 
    <trid> 
     <svtrid>607c6b1f-2093-4eef-9756-8d9e9f0689cb-72387</svtrid> 
</trid> 
</response> 

Есть идеи?

ответ

0

Согласно RFC 5730,

2001 - Ошибка команды Синтаксис

Этот код ответа ДОЛЖЕН быть возвращен, когда сервер получает неправильно сформированный командный элемент.

Это значит, что XML не действительна. Если вы присмотритесь взяли, вы можете увидеть, что ваш открывающий тег не соответствует закрывающий тег в следующей строке:

<pw>XXXXpw> 
     ^

Изменить что:

<pw>XXXX</pw> 

, и вы должны быть в порядке.


UPDATE:

Кажется, это встречающийся при использовании simplexml_load_file который интерпретирует файл XML как объект. Мне кажется, что серверу нужен сырой XML в качестве ввода, а с simplexml_load_file вы отправляете объект.

Чтобы устранить эту проблему, вы можете просто file_get_contents получить содержимое своего XML-файла, а затем отправить его, как обычно.

Обратите внимание, что это не лучший подход, но это может решить вашу проблему.

Удачи вам!

+0

Извините, но пропустил <когда я вводил XXX, чтобы скрыть пароль. – LefterisL

+0

Проблема возникает, когда я пытаюсь отправить ее, хотя simpleXML_load НЕ, когда я передаю XML переменной через код. – LefterisL

+0

@TerisL: ах, я вижу. Как вы отправляете переменную на сервер? Кроме того, вы используете 'simplexml_load_string()' для переменной для интерпретации его как объекта или просто отправляете его как необработанный XML? Если вы делаете последнее, то, вероятно, поэтому ваш код не работает. –