Perl 错误Cisco Prime HTTP GET请求

Perl 错误Cisco Prime HTTP GET请求,perl,Perl,我正在尝试使用Cisco Prime发出HTTP GET请求: #!/opt/local/bin/perl -w use strict; use JSON-support_by_pp; use LWP 5.64; use LWP::UserAgent; $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; my $ua = LWP::UserAgent->new; my $BASE_URL = 'https://Host_name/webacs/api/

我正在尝试使用Cisco Prime发出HTTP GET请求:

#!/opt/local/bin/perl -w

use strict;

use JSON-support_by_pp;
use LWP 5.64;
use LWP::UserAgent;

$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;

my $ua = LWP::UserAgent->new;

my $BASE_URL = 'https://Host_name/webacs/api/v1/';
my $UN       = "Username";
my $PW       = "Password";

sub fetch ($) {
    my ( $url ) = @_;
    my $req = HTTP::Request->new( GET => $BASE_URL . $url );
    $req->authorization_basic( $UN, $PW );
    return $ua->request( $req )->content or die( "Cannot read from " . $BASE_URL . $url );
}

my $content = fetch( 'data/AccessPoints.json?.full=true' );

my $json = new JSON;

# these are some nice json options to relax restrictions a bit:
my $json_text =
        $json->allow_nonref->utf8->relaxed->escape_slash->loose->allow_singlequote->allow_barekey->decode( $content );

foreach my $ap ( @{ $json_text->{queryResponse}->{'entity'} } ) {

    print "------------------------\nAccess Point " . $ap->{'accessPointsDTO'}->{'@id'} . "\n";
    print "Model:" . $ap->{'accessPointsDTO'}->{'model'} . "\n";
    print "MAC Address:" . $ap->{'accessPointsDTO'}->{'macAddress'} . "\n";
    print "Serial Number:" . $ap->{'accessPointsDTO'}->{'serialNumber'} . "\n";
    print "Software Version:" . $ap->{'accessPointsDTO'}->{'softwareVersion'} . "\n";
    print "Status:" . $ap->{'accessPointsDTO'}->{'status'} . "\n";
    print "Location:" . $ap->{'accessPointsDTO'}->{'location'} . "\n";
我做错了什么?我已经在shell中尝试了curl,它可以工作:

    curl --tlsv1 --user USER:PASSWORD--insecure https://Host_name/webacs/api/v1/data/AccessPoints.json?.full=true
但是我的Perl脚本不起作用

我有一个错误:

格式错误的JSON字符串,字符偏移量为0的数组、对象、数字、字符串或原子都无法连接到10。。。。在ersteProbe.pl第28行

已经修好了。谢谢你,博罗丁:

新问题: 我需要Cisco Prime的身份验证。 代码已经工作了,但身份验证不起作用

我犯了错误

    500 Can't connect to 10.10.10.10:443 (certificate verify failed) at ersteProbeAuth.pl line 27.
第27行:

      die $res->status_line unless $res->is_success;
我是Perl方面的新手,自己无法解决这个问题。如果你有想法,我会很高兴:

    #!/opt/local/bin/perl -w
    use strict;
    use warnings;
    use JSON -support_by_pp;
    use LWP 5.64;
    use LWP::UserAgent;
    use MIME::Base64;
    use REST::Client;

    $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
    my $ua = LWP::UserAgent->new;

    my $BASE_URL = 'https://10.10.10.10/webacs/api/v1/';
    my $UN='admin';
    my $PW='admin';
    # coding with Base 64
    my $sys_id='Balalalalalal';
    my $encoded_auth = encode_base64("$UN:$PW", '');

    sub fetch {
        my ($url) = @_;
        my  $res = $ua->get($BASE_URL . $url,
             {'Authorization' => "Basic $encoded_auth",
              'Accept' => 'application/json'});
       die $res->status_line unless $res->is_success;
       my $json = $res->decoded_content;
       return $json
    }
    my $content = fetch('data/AccessPoints.json?.full=true/$sys_id');
    my $json = new JSON;
    # these are some nice json options to relax restrictions a bit:  my$json_text=$json->allow_nonref->utf8->relaxed->escape_slash->loose->allow_singlequote->allow_barekey->decode($content);
   foreach my $ap (@{$json_text->{queryResponse}->{'entity'}}){
   print "------------------------\nAccess Point ".$ap->{'accessPointsDTO'}->{'@id'}."\n";
   print "Model:".$ap->{'accessPointsDTO'}->{'model'}."\n";
   print "MAC Address:".$ap->{'accessPointsDTO'}->{'macAddress'}."\n";
   print "Serial Number:".$ap->{'accessPointsDTO'}->{'serialNumber'}."\n";
   print "Software Version:".$ap->{'accessPointsDTO'}->{'softwareVersion'}."\n";
   print "Status:".$ap->{'accessPointsDTO'}->{'status'}."\n";
   print "Location:".$ap->{'accessPointsDTO'}->{'location'}."\n";
   }

在控制台中从服务器打印原始答案

格式错误的JSON字符串,字符偏移量为0的数组、对象、数字、字符串或原子都无法连接到10

无法连接到10


也许,您的代码不是have connect

如果不访问网页,很难判断出问题所在,但几乎可以肯定您的请求已失败

我建议您将fetch子例程替换为

sub fetch {
    my ( $url ) = @_;

    my $res = $ua->get( $BASE_URL . $url );
    die $res->status_line unless $res->is_success;

    my $json = $res->decoded_content;

    return $json;
}

您的Perl代码乱七八糟,您不可能确信它是正确的。这一次我已经为你修好了,这样我就可以阅读了,但请以后发布易读的代码。缺少一个右大括号},它会生成一个警告:控制流运算符可能存在优先级问题,但您没有告诉我们。请不要使用Perl子例程原型,如sub-fetch${…}。它们不做您认为它们做的事情,只做sub-fetch{…}是正确的。缺少右括号真是太傻了。}对不起。你能看看我的认证吗?这是一个单独的问题,应该作为一个新问题发布。但请看一看。顺便说一下,请通过编辑问题添加新信息,特别是代码;这几乎不可能在评论中读到。已经完成了。但在这种情况下,我应该发布新问题还是编辑旧问题?