php-启用OCS库存Web服务接口以查询资产数据

如何启用OCS WebServices中所述的OCS库存界面?是否有在PHP中使用此Web服务的示例代码

解决方法:

认情况下,OCS接口是禁用的,使用前必须将其打开. OCS具有在Perl中开发的核心代码,并且可以在Apache HTTP上运行.

首先,编辑文件/etc/apache2/conf-enabled/z-ocsinventory-server.conf,将OCS_OPT_WEB_SERVICE_ENABLED的选项值更改为1.
如果未启用Web服务,则应收到401禁止响应.这是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 …和Require属性.

重新启动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中找不到.在这方面,您应该下载模块HTTP-Message-6.04.tar.gz并通过在终端上键入以下命令来手动安装它:

>使用tar -zxf HTTP-Message-6.04.tar.gz解压缩
>调用新目录cd HTTP-Message-6.04 /
> perl Makefile.PL
>制作
>做测试
>进行安装
>最后,通过键入cpan -D HTTP :: Message检查模块是否成功降级(它应该输出…已安装:6.04 …)
>重新启动服务器-服务apache2重新启动

运行上面显示PHP代码段以再次对其进行测试.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...