XML-RPC для PHP Невозможно добавить параметры в одну структуру

я использую XML-RPC Lib для PHP сделать запрос XML-RPC к внешнему серверу

Метод требует, чтобы входные данные имели следующий формат:

<?xml version="1.0"?>
<methodCall>
<methodName>GetAllowedService</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>NodeType</name>
<value>
<string>A</string>
</value>
</member>
<member>
<name>originHostName</name>
<value>
<string>Admin1</string>
</value>
</member>
<member>
<name>originTransactionID</name>
<value>
<string>566613</string>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>

Я следую приведенным в библиотеке примерам и использовал следующий код для генерации запроса. Код, который я пробовал:

$inAr = array("NodeType" => "A", "originHostName" => "Admin1", "originTransactionID" => "566613");
print "This is the input data:<br/><pre>";
foreach($inAr as $key => $val) {
print $key . ", " . $val . "\n";
}
print "</pre>";

// create parameters from the input array: an xmlrpc array of xmlrpc structs
$p = array();
foreach ($inAr as $key => $val) {
$p[] = new PhpXmlRpc\Value(
array(
$key => new PhpXmlRpc\Value($val)
)
,"struct");
}
$v = new PhpXmlRpc\Value($p, "struct");
// create client and message objects
$req = new PhpXmlRpc\Request('GetAllowedService', $v);
$client = new PhpXmlRpc\Client("http://serverip");
$client->setCredentials('user','pass');

// set maximum debug level, to have the complete communication printed to screen
$client->setDebug(2);

// send request
print "Now sending request (detailed debug info follows)";
$resp = $client->send($req);

но отправляемый запрос выглядит следующим образом (каждый параметр обернут внутри структуры):

<?xml version="1.0"?>
<methodCall>
<methodName>GetAllowedService</methodName>
<params>
<param>
<value><struct>
<member><name>originNodeType</name>
<value><string>A</string></value>
</member>
</struct></value>
</param>
<param>
<value><struct>
<member><name>originHostName</name>
<value><string>Admin1</string></value>
</member>
</struct></value>
</param>
<param>
<value><struct>
<member><name>originTransactionID</name>
<value><string>566613</string></value>
</member>
</struct></value>
</param>
<param>
<value><struct>
</struct></value>
</param>
</params>
</methodCall>

Как изменить код для отправки запроса в нужном формате, указанном выше? Я использовал «массив» вместо struct при создании PhpXmlRpc \ Value в цикле foreach, но все еще не получил нужный формат. Я также пытался использовать метод addStruct, доступный в классе PhpXmlRpc \ Value, но запрос отправляется пустым. Есть идеи?

0

Решение

Вот правильный код:

$inAr = array("NodeType" => "A", "originHostName" => "Admin1", "originTransactionID" => "566613");
print "This is the input data:<br/><pre>";
foreach($inAr as $key => $val) {
print $key . ", " . $val . "\n";
}
print "</pre>";

// create parameters from the input array: an xmlrpc array of xmlrpc structs
$p = array();
foreach ($inAr as $key => $val) {
$p[$key] = new PhpXmlRpc\Value($val);
}
$v = new PhpXmlRpc\Value($p, "struct");

// create client and message objects
$req = new PhpXmlRpc\Request('GetAllowedService', array($v));
$client = new PhpXmlRpc\Client("http://serverip");
$client->setCredentials('user','pass');

// set maximum debug level, to have the complete communication printed to screen
$client->setDebug(2);

// send request
print "Now sending request (detailed debug info follows)";
$resp = $client->send($req);

И это сгенерированная полезная нагрузка:

---SENDING---
POST / HTTP/1.0
User-Agent: XML-RPC for PHP 4.3.0
Host: serverip
Authorization: Basic dXNlcjpwYXNz
Accept-Encoding: gzip, deflate
Accept-Charset: UTF-8,ISO-8859-1,US-ASCII
Content-Type: text/xml
Content-Length: 410

<?xml version="1.0"?>
<methodCall>
<methodName>GetAllowedService</methodName>
<params>
<param>
<value><struct>
<member><name>NodeType</name>
<value><string>A</string></value>
</member>
<member><name>originHostName</name>
<value><string>Admin1</string></value>
</member>
<member><name>originTransactionID</name>
<value><string>566613</string></value>
</member>
</struct></value>
</param>
</params>
</methodCall>
---END---
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector