Perl 错误Cisco Prime HTTP GET请求
我正在尝试使用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/
#!/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{…}是正确的。缺少右括号真是太傻了。}对不起。你能看看我的认证吗?这是一个单独的问题,应该作为一个新问题发布。但请看一看。顺便说一下,请通过编辑问题添加新信息,特别是代码;这几乎不可能在评论中读到。已经完成了。但在这种情况下,我应该发布新问题还是编辑旧问题?