#!/usr/bin/perl use strict; use warnings; use SOAP::Lite; use v5.16; my $client = SOAP::Lite ->proxy('https://www.example.com/WAS/API/AWEService.asmx?ENDPOINT') ->on_action(sub { join '/', @_ }) ->ns('http://tempuri.org/AWEService/API/WASAPI','was'); my %auth_parms = ( WAS_userName => 'USER', WAS_password => 'PASSWORD', ); my %search_parms = ( DEVICE_NAME => 'SERVER', ); my @auth_data; for (keys %auth_parms){ my $data = SOAP::Data->name( $_ => $auth_parms{$_} )->prefix('was'); push @auth_data, SOAP::Data->type('data' => $data); } my @search_data; for (keys %search_parms){ my $data = SOAP::Data->name( $_ => $search_parms{$_} )->prefix('was'); push @search_data, SOAP::Data->type('data' => $data); } my $auth = SOAP::Data->name( "userIdentification" => \@auth_data )->prefix('was'); my $search = SOAP::Data->name( "locatorSearchFieldsIdentification" => \@search_data )->prefix('was'); my $header = SOAP::Data->type('xml' => ''); my $response = $client->call("RunLocator", SOAP::Header->type('data' => $header), SOAP::Data->type('data' => $auth), SOAP::Data->type('data' => $search) ); if ($response->valueof('//RunLocatorResult')) { my $serial = $response->valueof('//SERIAL_NUMBER'); my $model = join(' ', scalar $response->valueof('//MANUFACTURER'), scalar $response->valueof('//MODEL') ); my $location = join(' ', scalar $response->valueof('//BUILDING'), scalar $response->valueof('//FLOOR'), scalar $response->valueof('//SPACE_ID'), scalar $response->valueof('//GRID_LOCATION'), scalar $response->valueof('//RACK_NAME') ); return ($serial, $model, $location); }