Perl 为什么我的REST请求返回垃圾数据?

Perl 为什么我的REST请求返回垃圾数据?,perl,json,rest,lwp,Perl,Json,Rest,Lwp,我正在尝试使用LWP::Simple向REST服务发出GET请求。下面是简单的代码: use LWP::Simple; $uri = "http://api.stackoverflow.com/0.8/questions/tagged/php"; $jsonresponse= get $uri; print $jsonresponse; 在我的本地机器上,运行Ubuntu 10.4和Perl 5.10.1版: farhan@farhan-lnx:~$perl--版本 这是为x86_64-lin

我正在尝试使用LWP::Simple向REST服务发出GET请求。下面是简单的代码:

use LWP::Simple;
$uri = "http://api.stackoverflow.com/0.8/questions/tagged/php";
$jsonresponse= get $uri;
print $jsonresponse;
在我的本地机器上,运行Ubuntu 10.4和Perl 5.10.1版:

farhan@farhan-lnx:~$perl--版本
这是为x86_64-linux-gnu-thread-multi构建的perl,v5.10.1(*)

我可以得到正确的响应并将其打印在屏幕上。例如:

farhan@farhan-lnx:~$head-10 output.txt
{
“总计”:1000,
“页面”:1,
“页面大小”:30,
“问题”:[
{
“标签”:[
“php”,
“数组”,
“编码风格”
(…剪断了…)

但是在我SSH连接到的主机机器上,屏幕上会打印出相同代码的垃圾。我假设这与编码有关,但REST服务不会在响应中返回字符集类型,那么我如何强制LWP::Simple使用正确的编码?有什么想法吗

以下是主机机器上的Perl版本:

[dredd]$perl——版本
这是为x86_64-linux-gnu-thread-multi构建的perl v5.8.8


这是。将libwww-perl升级到5.827或更高版本。

这是。将libwww-perl升级到5.827或更高版本。

我碰巧有一个64位RHEL 5.4框,上面有perl 5.8.8。我获取了您的代码,得到了完全相同的结果。我尝试使用转储数据,但没有任何改变。然后我转到命令行d这样做:

 wget -O jsonfile http://api.stackoverflow.com/0.8/questions/tagged/php
 --2010-05-26 11:42:41--  http://api.stackoverflow.com/0.8/questions/tagged/php
 Resolving api.stackoverflow.com... 69.59.196.211
 Connecting to api.stackoverflow.com|69.59.196.211|:80... connected.
 HTTP request sent, awaiting response... 200 OK
 Length: 5430 (5.3K) [application/json]
 Saving to: `jsonfile'
 2010-05-26 11:42:42 (56.9 KB/s) - `jsonfile' saved [5430/5430]
 file jsonfile
当我这样做的时候:

 wget -O jsonfile http://api.stackoverflow.com/0.8/questions/tagged/php
 --2010-05-26 11:42:41--  http://api.stackoverflow.com/0.8/questions/tagged/php
 Resolving api.stackoverflow.com... 69.59.196.211
 Connecting to api.stackoverflow.com|69.59.196.211|:80... connected.
 HTTP request sent, awaiting response... 200 OK
 Length: 5430 (5.3K) [application/json]
 Saving to: `jsonfile'
 2010-05-26 11:42:42 (56.9 KB/s) - `jsonfile' saved [5430/5430]
 file jsonfile
我得到:

jsonfile: gzip compressed data, from FAT filesystem (MS-DOS, OS/2, NT), max speed
因此,JSON数据是由web服务器压缩的。我尝试了以下方法:

gzip -dc jsonfile
瞧,结果就是您所期望的JSON数据


您现在可以使用另一个模块来解压缩数据,或者

我碰巧有一个64位RHEL 5.4框,上面有Perl 5.8.8。我获取了您的代码并得到了完全相同的结果。我尝试使用转储数据,但没有改变任何内容。然后我转到命令行并执行以下操作:

 wget -O jsonfile http://api.stackoverflow.com/0.8/questions/tagged/php
 --2010-05-26 11:42:41--  http://api.stackoverflow.com/0.8/questions/tagged/php
 Resolving api.stackoverflow.com... 69.59.196.211
 Connecting to api.stackoverflow.com|69.59.196.211|:80... connected.
 HTTP request sent, awaiting response... 200 OK
 Length: 5430 (5.3K) [application/json]
 Saving to: `jsonfile'
 2010-05-26 11:42:42 (56.9 KB/s) - `jsonfile' saved [5430/5430]
 file jsonfile
当我这样做的时候:

 wget -O jsonfile http://api.stackoverflow.com/0.8/questions/tagged/php
 --2010-05-26 11:42:41--  http://api.stackoverflow.com/0.8/questions/tagged/php
 Resolving api.stackoverflow.com... 69.59.196.211
 Connecting to api.stackoverflow.com|69.59.196.211|:80... connected.
 HTTP request sent, awaiting response... 200 OK
 Length: 5430 (5.3K) [application/json]
 Saving to: `jsonfile'
 2010-05-26 11:42:42 (56.9 KB/s) - `jsonfile' saved [5430/5430]
 file jsonfile
我得到:

jsonfile: gzip compressed data, from FAT filesystem (MS-DOS, OS/2, NT), max speed
因此,JSON数据是由web服务器压缩的。我尝试了以下方法:

gzip -dc jsonfile
瞧,结果就是您所期望的JSON数据


您现在可以使用另一个模块来解压缩数据,或者

很酷-感谢指针-但是阅读Tony上面的回答,这似乎是一个稍有不同的问题。无论如何,主机系统上的Perl版本超出了我的能力范围:(.libwwperl是一个Perl模块,有一些方法可以确保您可以在以下位置使用CPAN:但使用LWP::Request可能是最简单的。Alienfluid,您错了,这不是另一个问题。LWP::Simple 5.827之前的Simple中未使用的方法
decode\u content
处理这两种内容编码(此处:gzip)和字符编码。我鼓励您安装最新库的本地副本,如Tony所说。很酷-感谢指针-但阅读Tony上面的回答,这似乎是一个稍微不同的问题。无论如何,主机系统上的Perl版本是我力所不及的:(.libwwperl是一个Perl模块,有一些方法可以确保您可以在以下位置使用CPAN:但使用LWP::Request可能是最简单的。Alienfluid,您错了,这不是另一个问题。LWP::Simple 5.827之前的Simple中未使用的方法
decode\u content
处理这两种内容编码(此处:gzip)和字符编码。我鼓励你像Tony说的那样安装最新库的本地副本。