Включение интерфейса OCS Inventory WebService для запроса данных об активах

Как включить интерфейс инвентаризации OCS, описанный в OCS WebServices? Есть ли пример кода для использования этого веб-сервиса в PHP?

2

Решение

Интерфейс OCS по умолчанию отключен, его необходимо включить перед использованием. OCS имеет основной код, разработанный на Perl, и работает через Apache HTTP.

Сначала отредактируйте файл /etc/apache2/conf-enabled/z-ocsinventory-server.conf изменение значения параметра для OCS_OPT_WEB_SERVICE_ENABLED в 1.
Если веб-сервис не включен, вы должны получить 401 Запрещено ответ. Это SOAP WebService, и в нем нет WSDL для описания функций, только документы, доступные в Документация OCS WS.

Проверьте, если тег местоположения для / ocsinterface выглядит как следующий фрагмент:

 <Location /ocsinterface>
SetHandler perl-script
PerlHandler Apache::Ocsinventory::SOAP
# By default, you can query web service from everywhere with a valid user
Order deny,allow
Allow from all
AuthType Basic
AuthName "OCS Inventory SOAP Area"# Use htpasswd to create/update soap-user (or another granted user)
AuthUserFile "/etc/apache2/passwd/soapinterface"Require valid-user
</Location>

Вы должны создать пароль для этого местоположения в целях безопасности, однако, чтобы отключить аутентификацию, просто закомментируйте все Авт … а также требовать атрибутов.

Перезапустите сервер Apache и используйте приведенный ниже код PHP для проверки интеграции с веб-сервисом.

<?php
$proto = 'http';
$host = 'localhost';
$port = '80';
$user = ''; //basic authentication, if necessary
$pass = '';

$options = array(
'location' => "$proto://$host:$port/ocsinterface",
'uri' => "$proto://$host:$port/Apache/Ocsinventory/Interface",
'login' => $user,
'password' => $pass,
'trace' => TRUE,
'soap_version' => SOAP_1_1,
);

$request = '
<REQUEST>
<ENGINE>FIRST</ENGINE>
<ASKING_FOR>META</ASKING_FOR>
<CHECKSUM>131071</CHECKSUM>
<OFFSET>0</OFFSET>
<WANTED>131071</WANTED>
</REQUEST>';

try {
$client = new SoapClient(NULL, $options);
} catch (Exception $e) {
echo "<b>Construct Error</b>: " . $e->getMessage() . "<br>";
}

try {
$result = $client->get_computers_V1($request);
echo "<b>Headers:</b><pre>" . $client->__getLastRequestHeaders() . " </pre><br>";
echo "<b>Request:</b><pre>" . $client->__getLastRequest() . "</pre><br>";
echo "<b>Result:</b><pre>";
var_dump($result);
echo "</pre><br>";
} catch (Exception $e) {
echo "<b>Connection Error</b>: " . $e->getMessage() . "<br><br>";
echo "<b>Headers:</b><pre>\r\n" . $client->__getLastRequestHeaders() . " </pre><br>";
echo "<b>Request:</b><pre>\r\n" . $client->__getLastRequest() . "</pre>";
}

Если вы получите Внутренняя ошибка сервера HTTP 500, проверьте журнал ошибок apache (tail -f /var/log/apache2/error.log -n 100) для следующего сообщения об ошибке:

Недопустимое имя поля ‘APR :: Table = HASH (0x7ff114bd75a8)’ в /usr/local/share/perl/5.18.2/SOAP/Transport/HTTP2.pm строка 103. \ n

Эта ошибка возникает из-за проблемы несовместимости, обнаруженной в модуле perl HTTP :: Message. Следующие ссылки описывают проблему и решение, связанное с ней:

  1. http://ask.ocsinventory-ng.org/735/demande-dinformations-web-service-ocs-inventory
  2. https://www.tnpi.net/support/forums/index.php?topic=1037.0

Чтобы это исправить, вам нужно понизить модуль perl HTTP :: Message до версии 6,04. Используйте команду cpan -D HTTP::Message в вашей консоли, чтобы проверить, какую версию вы используете. Эта версия модуля немного устарела, поэтому вы не найдете в Поиск CPAN. В связи с этим стоит скачать модуль HTTP-Message-6.04.tar.gz и установите его вручную, введя следующие команды на своем терминале:

  1. распакуйте его, используя tar -zxf HTTP-Message-6.04.tar.gz
  2. позвонить в новый каталог cd HTTP-Message-6.04/
  3. perl Makefile.PL
  4. make
  5. make test
  6. make install
  7. и, наконец, проверьте, был ли модуль успешно понижен, набрав cpan -D HTTP::Message(должен выводить … Установлено: 6.04 …)
  8. перезагрузите сервер — service apache2 restart

Запустите фрагмент PHP, показанный выше, чтобы протестировать его снова.

3

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

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

По вопросам рекламы [email protected]