为什么我的 REST 请求返回垃圾数据?
我正在尝试使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我碰巧有一个 64 位 RHEL 5.4 机器,上面有 Perl 5.8.8。我拿了你的代码并得到了完全相同的结果。我尝试使用 Data::Dumper 转储数据,但这并没有改变任何事情。然后我转到命令行并执行此操作:
当我执行此操作时:
我得到:
因此,JSON 数据由 Web 服务器进行 gzip 压缩。我尝试了这个:
你瞧,结果就是您所期望的 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:
When I did this:
I got:
So, the JSON data was gzipped by the web server. I tried this:
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
这是错误 44435。将 libwww-perl 升级到版本 5.827 或更高版本。
This is bug 44435. Upgrade libwww-perl to version 5.827 or better.