2013-05-13 131 views
0

上运行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); 

有谁知道问题可能是什么?

在此先感谢

+1

显示我们代码的其余部分将是我们一个很大的帮助。 – jwodder 2013-05-13 01:35:00

+0

我把其余的...... – 2013-05-13 01:36:57

+0

从'STDIN'读取时,你必须'chomp'你的变量去除换行符。 'chomp(我们的$ qve = );'我想你可以使用'my'而不是'our'。 – 2013-05-13 01:43:35

回答

3

我有点惊讶JSON错误是你得到的唯一错误。但它确实包含了一点小小的提示:“LWP将支持htt ...”。我敢打赌,LWP缺少一个需要能够进行https连接的模块。你现在有两种选择:

  1. print $response->content看到完整的错误信息。
  2. 在命令行上,执行诸如lwp-request https://google.com/之类的操作。你应该看到完整的错误信息。

然后安装缺少的模块。

,当然还有:请,请,请:

  • use strictuse warnings
  • 清洁该脚本,丢了每一个use直插你并不需要:IO ::插座,LWP: :简单,YAML :: Tiny。
  • 阅读您实际使用的模块的文档。你想用LWP::UserAgent->new(keep_alive)实现什么目标?提示:这不会引用keep_alive
+0

我得到这个是缺少的模块:@ubuntu:〜/ Desktop $ lwp-request https://google.com/ 如果安装了LWP :: Protocol :: https模块 ,LWP将支持https URL。 但是由于某种原因它可以不被安装 – 2013-05-13 09:37:41

+0

我得到这个错误:在这个命令中失败: GAAS/LWP-Protocol-https-6.04.tar.gz:make_test NO – 2013-05-13 09:43:14

+0

如果这是在Ubuntu上,你可以简单地安装'liblwp-protocol-https-perl'软件包。 – innaM 2013-05-13 10:09:32

2

的一些问题:

  1. 始终使用use strict; use warnings;
  2. 千万不要使用$response->content。它返回的是无用的。相反,使用$response->decoded_content(charset => 'none')
  3. 您需要chomp您从STDIN获得的值。
  4. 除非强制(例如our @ISA = ok),否则绝对不能使用our。应该使用my
  5. my $format = '$format'; "$format"是写作的一种愚蠢的方式"\$format"
+0

好的,但它没有问题。因为脚本在我的另一台计算机上正常工作。有人可以在他的电脑上试用它并告诉我结果吗? – 2013-05-13 02:35:38

+0

@MilosLazovic:您是否尝试过这些建议,或者是因为脚本碰巧在一台计算机上工作而解雇他们?你真的想解决这个问题吗? – siride 2013-05-13 02:37:48

+0

我尝试了..它并没有解决问题只是使新.. – 2013-05-13 02:50:14

1

我应用了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); 
} 
+0

这是该代码版本的干净版本,但决不是正确的版本。 – innaM 2013-05-13 08:26:46

+0

仍然不适用于我:格式不正确的JSON字符串,无论数组,对象,数字,字符串还是原子,在字符偏移0(在“LWP将支持htt ...之前”)在iptest.pl行26,第2行。 – 2013-05-13 09:32:15

1

为了记录在案,这个固定的问题,我(CentOS的):

#百胜安装Perl的地穴-SSLeay的

+0

因为我没有使用yum软件包,所以我做了“cpan Crypt :: SSLeay”来解决这个问题。 – 2017-10-03 23:27:10

相关问题