Почему мой запрос REST возвращает данные мусора? - PullRequest
1 голос
/ 26 мая 2010

Я пытаюсь использовать LWP :: Simple, чтобы сделать запрос GET к службе REST. Вот простой код:

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
Это perl v5.10.1 (*), созданный для x86_64-linux-gnu-thread-multi

Я могу получить правильный ответ и распечатать его на экране. E.g.:

farhan @ farhan-lnx: ~ $ head -10 output.txt
{
«всего»: 1000,
"страница": 1,
"размер страницы": 30,
"вопросы": [
{
"теги": [
"PHP",
"массивы",
«Кодирование стиль»
(... отрезал ...)

Но на компьютере моего хоста, к которому я подключаюсь по SSH, я получаю на экране мусор для того же точного кода. Я предполагаю, что это как-то связано с кодировкой, но служба REST не возвращает тип набора символов в ответе, так как мне заставить LWP :: Simple использовать правильную кодировку? Есть идеи, что здесь происходит?

Вот версия Perl на компьютере моего хоста:

[dredd] $ perl --version
Это perl, v8.8.8, собранный для x86_64-linux-gnu-thread-multi

Ответы [ 2 ]

4 голосов
/ 26 мая 2010

У меня получилось 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 были сжаты веб-сервером. Я попробовал это:

gzip -dc jsonfile

и вот, результаты - это данные JSON, как и следовало ожидать.

Теперь вы можете использовать другой модуль для распаковки данных или вы можете проверить этот другой поток, который показывает, как принимать gzip с помощью LWP :: UserAgent и обрабатывать запрос таким образом

3 голосов
/ 26 мая 2010

Это ошибка 44435 . Обновите libwww-perl до версии 5.827 или выше.

...