首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启用OCS库存WebService接口查询资产数据

启用OCS库存WebService接口查询资产数据
EN

Stack Overflow用户
提问于 2016-04-20 17:49:31
回答 1查看 5.2K关注 0票数 3

如何启用接触网WebServices描述的OCS库存接口?是否有在PHP中使用此Web服务的示例代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-20 17:49:31

默认情况下,OCS接口是禁用的,在使用它之前必须打开它。OCS有一个用Perl开发的核心代码,它运行在Apache上。

首先,编辑文件/etc/apache2/conf-enabled/z-ocsinventory-server.conf,将OCS_OPT_WEB_SERVICE_ENABLED的选项值更改为1。如果没有启用web服务,您应该得到401ForforcedResponse。这是一个SOAP WebService,没有WSDL来描述这些特性,只有接触网WS文档中可用的文档。

检查/ocsinterface的location标记是否与下面的代码片段类似:

代码语言:javascript
复制
 <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服务集成

代码语言:javascript
复制
<?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)以获得以下错误消息:

/usr/local/share/perl/5.18.2/SOAP/Transport/HTTP2.pm第103行的非法字段名“APR::Table=HASH(0x7ff114bd75a8)”。\n

该错误是由于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

要修复它,您需要将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片段来再次测试它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36751458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档