запрос на удаленный сервер XML

yasen

Guest
запрос на удаленный сервер XML

Приветствую, Господа!
Треба Ваша помощь.
Стоит задача отослать на удаленный сервер XML http://b2bdev.midoceangroup.com:5556/invoke/ATP_REQ/get_info_xml запрос дабы получить корректный XML ответ. XML запрос храниться в некотором XML файле, Связь с удаленным сервером только по HTTP.

XML запрос в таком виде: (file.xml)
PHP:
<ARTICLEAVAILABILITY>
<SUPPLIER>MOB</SUPPLIER>
<CUSTOMER>80803097</CUSTOMER>
<DATEMAX>2005-01-20</DATEMAX>
<ARTICLEDEFINITION>SPECIFIC</ARTICLEDEFINITION>
<ARTICLES>
<ARTICLENR>KC4174-06</ARTICLENR>
<ARTICLENR>KC1100-03</ARTICLENR>
</ARTICLES>
</ARTICLEAVAILABILITY>
Знакомый прредложил писать SOAP-запрос, я в этом не силен и прошу Вашу помощь
 

yasen

Guest
писать SOAP-запрос это правильный ход мыслей?
 

Кром

Новичок
>писать SOAP-запрос это правильный ход мыслей?

Да, знакомый предложил правильное решение.
В php есть все необходимое для этого.
 

yasen

Guest
Автор оригинала: Кром
>писать SOAP-запрос это правильный ход мыслей?

Да, знакомый предложил правильное решение.
В php есть все необходимое для этого.
создаем file.xml - файл-запрос
PHP:
POST /default.asmx HTTP/1.1 
Host: ws.dice.spb.ru 
Content-Type: text/xml; charset=utf-8 
Content-Length: length 
SOAPAction: "http://ws.dice.spb.ru/GetRates" 
 
<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
  <soap:Body> 
          <ARTICLEAVAILABILITY>
   <SUPPLIER>MOB</SUPPLIER>
   <CUSTOMER>80803097</CUSTOMER>
   <DATEMAX>2005-01-20</DATEMAX>
   <ARTICLEDEFINITION>SPECIFIC</ARTICLEDEFINITION>
   <ARTICLES>
   <ARTICLENR>KC4174-06</ARTICLENR>
   <ARTICLENR>KC1100-03</ARTICLENR>
   </ARTICLES>
</ARTICLEAVAILABILITY>
  </soap:Body> 
</soap:Envelope>
код взят из примера, в SOAPAction что надо прописывать - путь к базе, то есть: http://b2bdev.midoceangroup.com:5556/invoke/ATP_REQ/get_info_xml ?

так?

-~{}~ 26.01.05 13:57:

далее этот файл file.xml необходимо отослать на сервер, насколько я понимаю, как это лучше всего сделать?
 

Кром

Новичок
Тебе лучше начать с простых примеров.
Кстати, есть статья на русском: http://detail.phpclub.ru/article/nusoap
Начни с Hello World, потом когда поймешь принцип, перейдешь к работе со своими данными.
 

MiRacLe

просто Чудо
PHP:
<?php

require_once('HTTP/Client.php'); // goto pear.php.net

$xml_req =& new HTTP_Client();

// $xml_address - соответственно URL
// $xml_query - запрос

if (!PEAR::isError($xml_req->post($xml_address, $xml_query)))
{
		$xml = $xml_req->currentResponse();
$response = $xml['body']; // Твой ответ, парси на здоровье

echo htmlspecialchars($response);
}
?>
 

yasen

Guest
спасибо,

MiRacLe, Client.php - что это? откуда взять можно?

в моем случаи
$xml_address = http://b2bdev.midoceangroup.com:5556/invoke/ATP_REQ/get_info_xml
$xml_query - запрос - в каком виде?
 

yasen

Guest
а file.xml - который описан выше, корректно сделан?


SOAPAction что надо прописывать - путь к базе?

-~{}~ 26.01.05 16:30:

Что то я не понял в xml-файле
POST /default.asmx HTTP/1.1
Host: ws.dice.spb.ru
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: ""

эти строчки нужны?

-~{}~ 26.01.05 17:02:

хочу понять как вся же должен выглядить xml-файл - файл запроса, ГОСПОДА помогите незнайке, плиз
 

MiRacLe

просто Чудо
XML запрос в таком виде: (file.xml)

<ARTICLEAVAILABILITY>
<SUPPLIER>MOB</SUPPLIER>
<CUSTOMER>80803097</CUSTOMER>
<DATEMAX>2005-01-20</DATEMAX>
<ARTICLEDEFINITION>SPECIFIC</ARTICLEDEFINITION>
<ARTICLES>
<ARTICLENR>KC4174-06</ARTICLENR>
<ARTICLENR>KC1100-03</ARTICLENR>
</ARTICLES>
</ARTICLEAVAILABILITY>
PHP:
<?php

require_once('HTTP/Client.php'); // goto pear.php.net

$xml_req =& new HTTP_Client();

 $xml_address = 'http://b2bdev.midoceangroup.com:5556/invoke/ATP_REQ/get_info_xml'; //- соответственно URL
 $xml_query = '<ARTICLEAVAILABILITY>
<SUPPLIER>MOB</SUPPLIER>
<CUSTOMER>80803097</CUSTOMER>
<DATEMAX>2005-01-20</DATEMAX>
<ARTICLEDEFINITION>SPECIFIC</ARTICLEDEFINITION>
<ARTICLES>
<ARTICLENR>KC4174-06</ARTICLENR>
<ARTICLENR>KC1100-03</ARTICLENR>
</ARTICLES>
</ARTICLEAVAILABILITY>';  //- запрос

if (!PEAR::isError($xml_req->post($xml_address, $xml_query)))
{
        $xml = $xml_req->currentResponse();
$response = $xml['body']; // Твой ответ, парси на здоровье

echo htmlspecialchars($response);
}
?>
Хватит ума Незнайке сделать copy-paste ?

-~{}~ 26.01.05 17:18:

P.S. к SOAP это не имеет отношения.
Ответ прийдётся парсить вручную (try to find XMLParser.php, use Google, Luke,use Google)
 

yasen

Guest
MiRacLe

угу, странно
pear.php

<?php

require_once('Client.php');
$xml_req =& new HTTP_Client();
$xml_address = http://b2bdev.midoceangroup.com:5556/invoke/ATP_REQ/get_info_xml
$xml_query = file_get_contents('file.xml');

if (!PEAR::isError($xml_req->post($xml_address, $xml_query)))
{
$xml = $xml_req->currentResponse();
$response = $xml['body'];
echo htmlspecialchars($response);
}
?>

запускаю на сайте такой скрипт, ни ответа, ни привета,
file.xml и Client.php лежат там же, где и pear.php
в чем моя ошибка

-~{}~ 26.01.05 17:24:

парсер у меня готов
 

yasen

Guest
сорри ошибки есть
Warning: main(HTTP/Request.php): failed to open stream: No such file or directory in /home/httpd/alfa-design/storage/pear/Client.php on line 21

Fatal error: main(): Failed opening required 'HTTP/Request.php' (include_path='.:/usr/local/lib/php') in /home/httpd/alfa-design/storage/pear/Client.php on line 21

по поводу последней мыли не совсем понял
 

MiRacLe

просто Чудо
Итак о последней мысли, начну издалека.... так сказать совсем с другого,простите, конца...

No such file or directory - переводиться как "нету ни файла, ни каталога с таким именем,так что звиняйте"

какого именно файла "нетути" написано в круглых скобках

теперь всё же о мысли, ну так вот, "Dependencies" это "Зависимость" т.е. в файле Client.php есть строка require_once('Какой_то_там_файл.php');

о том какой именно файл хочет лицезреть Client.php написано в сообщении об ошибке

Откуда их можно взять ?
Вот мы и подошли к самому главному.
Надо всего лишь зайти на pear.php.net найти свой пакет (в данном,конкретном случае HTTP_Client) на страницу Download и вот как раз там мы и обнаружим строки приведённые выше, так же там содержатся и ссылки , пройдя по которым ты скачаешь необходимые пакеты...
 

Alexandre

PHPПенсионер
мне ни когда не нравилась PEAR, хотя там есть много интерестного :)

а что мешает прочитать 80 порт сокетами в твоем случае это 5556 порт
или использовать
curl

проблем на порядок меньше, чем с PEAR.

подводные камни: curl - может быть не установлена на хостинге, так же как и SOAP
а SOAP - это вообще отдельная песня...
 

MiRacLe

просто Чудо
Alexandre
ничто не мешает , кроме времени, удобства и велосипедо-изобретания(см свой orijin ;o) ),
я просто думал что мой вариант наиболее простой и легко выполнимый(кстати менее хостинго-зависимый)
насчёт проблем меньше - не согласен :)
там всё отлажено,оттестено , а-ля plug and play (вот только последний штрих остался - научиться понимать процесс установки и использования этих самых pear-овских пакетов)

-~{}~ 26.01.05 19:44:

P.S. Я не утверждаю что мой вариант самый лучший, самый быстродейственный,самый качественный и самый вообще самый-самый, но пытаюсь отверждать, что это самый быстрый путь решить задачу,малыми силами(читай меньшим числом строк кода,меньшим временем изучения "новых технологий" - тред-стартеру это ново)
 

Alexandre

PHPПенсионер
Я не утверждаю что мой вариант самый лучший, самый быстродейственный,самый качественный и самый вообще самый-самый, но пытаюсь отверждать, что это самый быстрый путь решить задачу,малыми силами
красиво сказанно, MiRacLe, разреши я процитирую твоими словами но уже про свой вариант, что он не самый лучший, самый быстродейственный,самый качественный и самый вообще самый-самый ;)

для определения лучшего варианта надо проводить исследования, а у меня времени на это нет.
Пусть yasen сам решает, как лучше: ему указали все (или почти все) пути решения.
 

yasen

Guest
Всем спасибо за помощь!

запрос работает! приходит ответ, по сему вопрос! В ответ приходит содержимое всей базы, а не то что мы указали в запросе. В чем моя ошибка? Или это так настроена база сервере. Какие варианты.........?
 
Сверху