1

我正在尝试使用 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 --version
这是为 x86_64-linux-gnu-thread-multi 构建的 perl, v5.10.1 (*)

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

farhan@farhan-lnx:~$ head -10 output.txt
{
"total": 1000,
"page": 1,
"pagesize": 30,
"questions": [
{
"tags": [
"php",
"arrays ”,
“编码风格”
(......剪断......)

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

这是我主机上的 Perl 版本:

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

4

2 回答 2

4

我碰巧有一个 64 位 RHEL 5.4 盒子,上面有 Perl 5.8.8。我拿了你的代码,得到了完全相同的结果。我尝试使用Data::Dumper转储数据,但这并没有改变任何东西。然后我转到命令行并执行此操作:

 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

因此,Web 服务器对 JSON 数据进行了 gzip 压缩。我试过这个:

gzip -dc jsonfile

如您所料,结果是 JSON 数据。

您现在可以做的是使用另一个模块来解压缩数据,或者您可以查看其他线程,该线程显示如何使用 LWP::UserAgent 接受 gzip 并以这种方式处理请求

于 2010-05-26T15:50:14.780 回答
3

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

于 2010-05-26T15:50:06.437 回答