当我尝试在第二台计算机上运行脚本时,我收到以下消息:
格式错误的 JSON 字符串,既不是数组、对象、数字、字符串或原子,也不是字符偏移量 0 (在“LWP 将支持 htt...”之前)在 iptest.pl 第 21 行第 2 行。
在我的第一台计算机上,脚本运行良好。
第 21 行:
my $data = decode_json($resp->content);
有谁知道问题可能是什么?
提前致谢
当我尝试在第二台计算机上运行脚本时,我收到以下消息:
格式错误的 JSON 字符串,既不是数组、对象、数字、字符串或原子,也不是字符偏移量 0 (在“LWP 将支持 htt...”之前)在 iptest.pl 第 21 行第 2 行。
在我的第一台计算机上,脚本运行良好。
第 21 行:
my $data = decode_json($resp->content);
有谁知道问题可能是什么?
提前致谢
JSON 错误是您得到的唯一错误,我有点惊讶。但它确实包含一个小小的提示:“LWP 将支持 htt...”。我敢打赌 LWP 缺少一个它需要能够建立 https 连接的模块。您现在有两个选择:
$response->content
以查看完整的错误消息。lwp-request https://google.com/
. 您应该会看到完整的错误消息。然后安装缺少的模块。
当然:请,请,请:
use strict
和use warnings
use
您不需要的每一行:IO::Socket、LWP::Simple、YAML::Tiny。LWP::UserAgent->new(keep_alive)
?提示:引用 没有帮助keep_alive
。一些问题:
use strict; use warnings;
.$response->content
. 它返回的东西是无用的。相反,使用$response->decoded_content( charset => 'none')
.chomp
从 STDIN 获得的值。our
除非被迫(例如our @ISA
= ok) ,否则您永远不应该使用。my
应改为使用。my $format = '$format'; "$format"
是一种愚蠢的写作方式"\$format"
。我应用了 ikegami 建议的大部分更改。然后 perl 给了我很好的错误信息来解决剩下的问题。看起来它现在可以工作了。不要问为什么它以前不起作用。你的代码很奇怪,很难说到底出了什么问题。有了严格和警告,您将被迫编写更好的代码。也许添加一些很好命名的子程序以增加清晰度。
#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket;
use LWP::UserAgent;
use open qw(:std :utf8);
use LWP::Simple;
use YAML::Tiny;
use JSON;
use URI;
use List::MoreUtils qw(uniq);
print "Enter Qve:";
my ( $qve, $loc, $key, $href );
chomp( $qve = <STDIN> );
print "Enter Location:";
chomp( $loc = <STDIN> );
$key = '';
my $format = '$format';
$href =
"https://api.datamarket.azure.com/Bing/Search/v1/Web?Query='$qve [loc:$loc]'&Latitude=43&Longitude=19&$format=JSON";
my $ua = LWP::UserAgent->new('keep_alive');
$ua->credentials( "api.datamarket.azure.com" . ':443', '', '', $key );
my $resp = $ua->get($href);
my $data = decode_json( $resp->decoded_content( charset => 'none' ) );
my @urls = map { $_->{'Url'} } @{ $data->{d}->{results} };
my @za;
for my $i ( 0 .. $#urls ) {
my $trz = "www.";
my $host = URI->new( $urls[$i] )->host;
$host =~ s/$trz//g;
push( @za, $host );
}
作为记录,这为我解决了这个问题(CentOS):
# yum install perl-Crypt-SSLeay
我遇到了同样的情况。在我使用 'yum' 安装 perl 后,运行 perl 脚本时仍然出现错误。
$ sudo yum install perl
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management
...
最终我做了这些,并且它有效。
$ lwp-request https://google.com/
It returned an error message .. (LWP::Protocol::https not installed)
$ sudo rpm -ivh ~/perl-LWP-Protocol-https-6.07-4.el8.noarch.rpm
$ lwp-request https://google.com/
它返回了一个 HTML 页面。
我的 perl 脚本可以正常运行。
(我的系统是:
$ cat /etc/os-release PRETTY_NAME=Red Hat Enterprise Linux 8.0 )