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

发布于 2024-09-03 05:42:36 字数 941 浏览 5 评论 0原文

我正在尝试使用 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 输出.txt
{
“总计”:1000,
“页”:1,
“页面大小”:30,
“问题”:[
{
“标签”:[
“php”,
“数组”,
“编码风格”
(...剪掉...)

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

这是我的主机上的 Perl 版本:

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

I am trying to use LWP::Simple to make a GET request to a REST service. Here's the simple code:

use LWP::Simple;
$uri = "http://api.stackoverflow.com/0.8/questions/tagged/php";
$jsonresponse= get $uri;
print $jsonresponse;

On my local machine, running Ubuntu 10.4, and Perl version 5.10.1:

farhan@farhan-lnx:~$ perl --version
This is perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi

I can get the correct response and have it printed on the screen. E.g.:

farhan@farhan-lnx:~$ head -10 output.txt
{
"total": 1000,
"page": 1,
"pagesize": 30,
"questions": [
{
"tags": [
"php",
"arrays",
"coding-style"
(... snipped ...)

But on my host's machine to which I SSH into, I get garbage printed on the screen for the same exact code. I am assuming it has something to do with the encoding, but the REST service does not return the character set type in the response, so how do I force LWP::Simple to use the correct encoding? Any ideas what may be going on here?

Here's the version of Perl on my host's machine:

[dredd]$ perl --version
This is perl, v5.8.8 built for x86_64-linux-gnu-thread-multi

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

痞味浪人 2024-09-10 05:42:36

我碰巧有一个 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

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

gzip -dc jsonfile

你瞧,结果就是您所期望的 JSON 数据。

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

I happen to have a 64 bit RHEL 5.4 box which has Perl 5.8.8 on it. I took your code and got the exact same result. I tried using Data::Dumper to dump the data, but that didn't change anything. I then went to the command line and did this:

 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]

When I did this:

 file jsonfile

I got:

jsonfile: gzip compressed data, from FAT filesystem (MS-DOS, OS/2, NT), max speed

So, the JSON data was gzipped by the web server. I tried this:

gzip -dc jsonfile

and lo and behold the results are the JSON data as you would expect.

What you can do now is to either use another module to ungzip the data, or you can check out this other thread which shows how to accept gzip using LWP::UserAgent and handle the request that way

眼眸印温柔 2024-09-10 05:42:36

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

This is bug 44435. Upgrade libwww-perl to version 5.827 or better.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文