簡體   English   中英

啟用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.confOCS_OPT_WEB_SERVICE_ENABLED的選項值OCS_OPT_WEB_SERVICE_ENABLED1 如果未啟用Web服務,則應獲得401 Forbidden響應。 這是一個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>

出於安全考慮,您應該為此位置創建密碼,但是,要關閉身份驗證,只需注釋掉所有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 )以獲取以下錯誤消息:

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

由於HTTP :: Message perl模塊中發現不兼容問題,會發生該錯誤。 以下鏈接描述了與之相關的問題和解決方案:

  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 perl模塊降級到版本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代碼段再次測試它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM