drno-reg
@drno-reg
см не кратко

Почему возвращается Can't call method «content» on an undefined value?

Здравствуйте.

для подключения к zabbix api написал такой код на perl

#!/usr/bin/perl
use 5.010;
use strict;
use warnings FATAL => 'all';
use JSON::RPC::Client;
use Data::Dumper;

# Authenticate yourself
my $client = new JSON::RPC::Client;
my $url = 'https://zabbix/api_jsonrpc.php';
my $authID;
my $response;

my $json = {
    jsonrpc => "2.0",
    method => "user.login",
    params => {
        user => "admin",
        password => "admin"
    },
    id => 1
};

$response = $client->call($url, $json);

# Check if response was successful
die "Authentication failed\n" unless $response->content->{'result'};

$authID = $response->content->{'result'};
print "Authentication successful. Auth ID: " . $authID . "\n";

# Get list of all hosts using authID

$json = {
    jsonrpc=> '2.0',
    method => 'host.get',
    params =>
    {
        output => ['hostid','name'],# get only host id and host name
        sortfield => 'name',        # sort by host name
    },
    id => 2,
    auth => "$authID",
};
$response = $client->call($url, $json);

# Check if response was successful
die "host.get failed\n" unless $response->content->{result};

print "List of hosts\n-----------------------------\n";
foreach my $host (@{$response->content->{result}}) {
    print "Host ID: ".$host->{hostid}." Host: ".$host->{name}."\n";
}


возвращается ошибка о невозможности вызова метода или неопределенности значения

Can't call method "content" on an undefined value at ZabbixAPI_Get.pl line 27.

die "Authentication failed\n" unless $response->content->{'result'};


как решить эту проблему?
  • Вопрос задан
  • 408 просмотров
Пригласить эксперта
Ответы на вопрос 2
nikonor
@nikonor
Программист go, perl
что-то подсказывает, что надо рыть в строну httpS. Я ни разу не спец по заббикс и rpc, но вот то, что соединение идет по TSL, а ничего про это в настройках соединения не говорится, как-то удивляет.

но это только версия. лучше всего начать с просмотра логов заббикса.
Ответ написан
Комментировать
parserpro
@parserpro
Причина ошибки - в переменную $response возвращается undef, от которого вполне логично нельзя вызвать метод content.
Почему так происходит - вопрос уже второй, но домен в переменной $url выглядит подозрительно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы