2010-05-26 9 views
1

LWP :: Simple을 사용하여 GET 요청을 REST 서비스에 적용하려고합니다. 내 로컬 컴퓨터에왜 내 REST 요청이 가비지 데이터를 반환합니까?

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

, 우분투 10.4, 펄 버전 5.10.1 실행 :

FARHAN @ FARHAN-LNX : ~ $ 펄 --version
이 인을 여기에 간단한 코드는 perl, x86_64-linux-gnu-thread-multi 용 v5.10.1 (*)

정확한 응답을 얻고 화면에 인쇄 할 수 있습니다. 예 :

FARHAN의 @의 FARHAN-LNX : ~ $ 헤드 -10 {
"총"
경우 output.txt : 1000,
"페이지": 1,
"페이지 크기"30
"질문에"[
{
"태그"[
"PHP",
"배열",
"코딩 스타일"
,(... 냈다가 ...)

하지만에 SSH를 내 호스트의 컴퓨터에

, 나는 똑같은 코드를 화면에 출력 쓰레기를 얻을. 나는 그것이 인코딩과 관련이 있다고 가정하고 있지만 REST 서비스는 응답에서 문자 집합 유형을 반환하지 않으므로 LWP :: Simple이 올바른 인코딩을 사용하도록하려면 어떻게해야합니까? 여기에 무슨 일이 일어날 지 모릅니다.

[저지 드레드] $ 펄 --version
이 펄, v5.8.8는 x86_64에-리눅스 GNU 스레드 멀티

을 위해 내장되어 있습니다 : 여기

내 호스트의 컴퓨터에 펄의 버전입니다

답변

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 

그래서, JSON 데이터는 웹에 의해 gzip으로 압축 된 섬기는 사람. 나는 이것을 시도했다 :

gzip -dc jsonfile 

그리고 내가보기에 결과는 JSON 데이터이다.

당신이 지금 할 수있는 것은 데이터를 gzip으로 묶인 파일을 풀어야 할 또 다른 모듈을 사용하거나, 또는 쿨 you can check out this other thread which shows how to accept gzip using LWP::UserAgent and handle the request that way

+0

굉장 - 고마워요! – Alienfluid

3

이것은 bug 44435입니다. libwww - perl을 버전 5.827 이상으로 업그레이드하십시오.

+0

- 포인터 주셔서 감사합니다 - 그것은 약간 다른 문제처럼하지만 위 토니의 응답을 읽기, 그것은 보인다. 어쨌든, 호스트 시스템의 펄 버전은 내 접근 범위를 넘어선 다. ( – Alienfluid

+0

libwwwperl은 펄 모듈이며 CPAN을 사용할 수있는 방법은 다음과 같다 : http://www.perlmonks.org/?node_id= 693828 LWP :: Request를 사용하는 것이 가장 쉬울 수도 있습니다. –

+0

Alienfluid, 틀린 문제입니다, 다른 문제는 아닙니다. 5.827 이전에 LWP :: Simple에서 사용되지 않은'decode_content' 메소드는 Content-Encoding : gzip) 및 문자 인코딩. 토니 (Tony)와 같은 최신 라이브러리의 로컬 복사본을 설치하는 것이 좋습니다. – daxim

관련 문제