启用 OCS Inventory WebService 接口以查询资产数据
Enabling OCS Inventory WebService interface for querying assets data
如何启用OCS WebServices中描述的OCS Inventory界面?在 PHP 中是否有使用此 Web 服务的示例代码?
OCS接口默认是关闭的,使用前需要开启。 OCS 有一个用 Perl 开发的核心代码,它运行在 Apache HTTP 上。
首先,编辑文件 /etc/apache2/conf-enabled/z-ocsinventory-server.conf
,将 OCS_OPT_WEB_SERVICE_ENABLED
的选项值更改为 1。
如果未启用网络服务,您应该会收到 401 Forbidden 响应。这是一个 SOAP WebService,没有 WSDL 来描述这些功能,只有 OCS WS Documentation.
中可用的文档
检查 /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>
为了安全起见,您应该为此位置创建一个密码,但是,要关闭身份验证,只需注释掉所有 Auth... 和 需要 属性。
重启apache服务器,使用下面的PHP代码测试web服务集成
<?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
) 以了解以下错误留言:
Illegal field name 'APR::Table=HASH(0x7ff114bd75a8)' at /usr/local/share/perl/5.18.2/SOAP/Transport/HTTP2.pm line 103.\n
该错误的发生是由于 HTTP::Message perl 模块中发现的不兼容问题。以下链接描述了与之相关的问题和解决方案:
- http://ask.ocsinventory-ng.org/735/demande-dinformations-web-service-ocs-inventory
- https://www.tnpi.net/support/forums/index.php?topic=1037.0
要修复它,您需要将 HTTP::Message perl 模块降级到版本 6.04。在您的控制台中使用命令 cpan -D HTTP::Message
来检查您使用的是哪个版本。此模块版本有点旧,因此您不会在 Search CPAN. In this regard, you should download the module HTTP-Message-6.04.tar.gz 中找到它并通过在终端中键入以下命令手动安装它:
- 使用
tar -zxf HTTP-Message-6.04.tar.gz
解压
- 调用新目录
cd HTTP-Message-6.04/
perl Makefile.PL
make
make test
make install
- 最后,通过输入
cpan -D HTTP::Message
检查模块是否成功降级(它应该输出 ... Installed: 6.04 ...)
- 重启服务器 -
service apache2 restart
运行 上面显示的 PHP 片段再次测试。
如何启用OCS WebServices中描述的OCS Inventory界面?在 PHP 中是否有使用此 Web 服务的示例代码?
OCS接口默认是关闭的,使用前需要开启。 OCS 有一个用 Perl 开发的核心代码,它运行在 Apache HTTP 上。
首先,编辑文件 /etc/apache2/conf-enabled/z-ocsinventory-server.conf
,将 OCS_OPT_WEB_SERVICE_ENABLED
的选项值更改为 1。
如果未启用网络服务,您应该会收到 401 Forbidden 响应。这是一个 SOAP WebService,没有 WSDL 来描述这些功能,只有 OCS WS Documentation.
检查 /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>
为了安全起见,您应该为此位置创建一个密码,但是,要关闭身份验证,只需注释掉所有 Auth... 和 需要 属性。
重启apache服务器,使用下面的PHP代码测试web服务集成
<?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
) 以了解以下错误留言:
Illegal field name 'APR::Table=HASH(0x7ff114bd75a8)' at /usr/local/share/perl/5.18.2/SOAP/Transport/HTTP2.pm line 103.\n
该错误的发生是由于 HTTP::Message perl 模块中发现的不兼容问题。以下链接描述了与之相关的问题和解决方案:
- http://ask.ocsinventory-ng.org/735/demande-dinformations-web-service-ocs-inventory
- https://www.tnpi.net/support/forums/index.php?topic=1037.0
要修复它,您需要将 HTTP::Message perl 模块降级到版本 6.04。在您的控制台中使用命令 cpan -D HTTP::Message
来检查您使用的是哪个版本。此模块版本有点旧,因此您不会在 Search CPAN. In this regard, you should download the module HTTP-Message-6.04.tar.gz 中找到它并通过在终端中键入以下命令手动安装它:
- 使用
tar -zxf HTTP-Message-6.04.tar.gz
解压
- 调用新目录
cd HTTP-Message-6.04/
perl Makefile.PL
make
make test
make install
- 最后,通过输入
cpan -D HTTP::Message
检查模块是否成功降级(它应该输出 ... Installed: 6.04 ...) - 重启服务器 -
service apache2 restart
运行 上面显示的 PHP 片段再次测试。