Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Сеть > POST-запрос -> XML-ответ


Автор: localhost 29.10.2013, 11:03
Всем привет!
Есть некий сервер, который получает POST-запрос, разбирает его и формирует XML-ответ

Код


header('Content-Type: text/xml');

/**
* Разбор переданного POST-массива
*/


$xmlstr = "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>\n";
$xmlstr .= "<Root>\n";

/**
* Здесь формируется XML
*/

$xmlstr .= "</Root>\n";

print $xmlstr;


Мне надо из скрипта на клиенте отправить POST-запрос и получить XML-ответ. Вроде бы ничего сложного нет, и ответ я, действительно, получаю, но вот почему-то при попытке передать этот ответ дальше на обработку в XMLReader, последний ругается на невалидный XML.
Если посмотреть на результат работы в браузере, то да - вываливается xml, но интерпретируется браузером как html-код.
Если скопировать исходный код полученной страницы в XML-файл, то обработка происходит корректно.

Подозреваю, что-то с HTTP-заголовками не так. Результат обращения к серверу в Firebug таков:

Код

Заголовки ответа
Connection    close
Content-Type    text/xml
Content-Encoding    gzip
Content-Length    2072
Content-Type    text/html
Date    Tue, 29 Oct 2013 07:54:40 GMT
Server    Apache/2.2.15 (CentOS)
Vary    Accept-Encoding,User-Agent
X-Powered-By    PHP/5.3.3


Код

Заголовки запроса
Accept    text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding    gzip, deflate
Accept-Language    ru-ru,en-us;q=0.8,ru;q=0.5,en;q=0.3
Cache-Control    max-age=0
Connection    keep-alive
DNT    1
Host    domain.tld
User-Agent    Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0


Странно, что "Contect-Type" дублируется

Код клиента в части отправки запроса
Код

    public function getXML($str_URL, $arr_POST_data) {
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $str_URL);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($arr_POST_data) . "\n");
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($ch, CURLOPT_USERAGENT, 'PHP Connector');
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }

$xml = $this->getXML($this->connector_url, $enc_data);


Так как мне отправить POST-запрос, чтобы получить в ответ XML, пригодный для передачи в XMLReader?
Заранее благодарю за помощь

Автор: Fortop 29.10.2013, 12:23
Цитата(localhost @  29.10.2013,  11:03 Найти цитируемый пост)
$enc_data

Вот эти данные просмотреть в любом hex-редакторе

Затем сохранить их в файл и отправить файл на валидацию (можно в xml-редакторе который это умеет)
Там вам скажут в чем проблема

Автор: AVA12 29.10.2013, 13:15
Цитата
при попытке передать этот ответ дальше на обработку в XMLReader, последний ругается на невалидный XML

Я, возможно, скажу глупость, но, быть может, проблема в том, что XML в ответе невалидный?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)