不能其他计算机
上运行Perl脚本,当我尝试我的第二台计算机上运行脚本,我得到这个消息:不能其他计算机
malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "LWP will support htt...") at iptest.pl line 21, line 2.
在我的第一台电脑,脚本工作正常。
线21:
my $data = decode_json($resp->content);
有谁知道问题可能是什么?
在此先感谢
我有点惊讶JSON错误是你得到的唯一错误。但它确实包含了一点小小的提示:“LWP将支持htt ...”。我敢打赌,LWP缺少一个需要能够进行https连接的模块。你现在有两种选择:
- print
$response->content
看到完整的错误信息。 - 在命令行上,执行诸如
lwp-request https://google.com/
之类的操作。你应该看到完整的错误信息。
然后安装缺少的模块。
,当然还有:请,请,请:
-
use strict
和use warnings
- 清洁该脚本,丢了每一个
use
直插你并不需要:IO ::插座,LWP: :简单,YAML :: Tiny。 - 阅读您实际使用的模块的文档。你想用
LWP::UserAgent->new(keep_alive)
实现什么目标?提示:这不会引用keep_alive
。
我得到这个是缺少的模块:@ubuntu:〜/ Desktop $ lwp-request https://google.com/ 如果安装了LWP :: Protocol :: https模块 ,LWP将支持https URL。 但是由于某种原因它可以不被安装 – 2013-05-13 09:37:41
我得到这个错误:在这个命令中失败: GAAS/LWP-Protocol-https-6.04.tar.gz:make_test NO – 2013-05-13 09:43:14
如果这是在Ubuntu上,你可以简单地安装'liblwp-protocol-https-perl'软件包。 – innaM 2013-05-13 10:09:32
的一些问题:
- 始终使用
use strict; use warnings;
。 - 千万不要使用
$response->content
。它返回的是无用的。相反,使用$response->decoded_content(charset => 'none')
。 - 您需要
chomp
您从STDIN获得的值。 - 除非强制(例如
our @ISA
= ok),否则绝对不能使用our
。应该使用my
。 -
my $format = '$format'; "$format"
是写作的一种愚蠢的方式"\$format"
。
好的,但它没有问题。因为脚本在我的另一台计算机上正常工作。有人可以在他的电脑上试用它并告诉我结果吗? – 2013-05-13 02:35:38
@MilosLazovic:您是否尝试过这些建议,或者是因为脚本碰巧在一台计算机上工作而解雇他们?你真的想解决这个问题吗? – siride 2013-05-13 02:37:48
我尝试了..它并没有解决问题只是使新.. – 2013-05-13 02:50:14
我应用了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);
}
这是该代码版本的干净版本,但决不是正确的版本。 – innaM 2013-05-13 08:26:46
仍然不适用于我:格式不正确的JSON字符串,无论数组,对象,数字,字符串还是原子,在字符偏移0(在“LWP将支持htt ...之前”)在iptest.pl行26,
为了记录在案,这个固定的问题,我(CentOS的):
#百胜安装Perl的地穴-SSLeay的
因为我没有使用yum软件包,所以我做了“cpan Crypt :: SSLeay”来解决这个问题。 – 2017-10-03 23:27:10
显示我们代码的其余部分将是我们一个很大的帮助。 – jwodder 2013-05-13 01:35:00
我把其余的...... – 2013-05-13 01:36:57
从'STDIN'读取时,你必须'chomp'你的变量去除换行符。 'chomp(我们的$ qve =);'我想你可以使用'my'而不是'our'。 –
2013-05-13 01:43:35