2011-12-09 10 views
4

url에서 get 요청을 수행하기 위해 perl을 사용하고 있으며 결과가 잘린 것처럼 보입니다.LWP :: Simple get 결과가 잘립니다.

나는 실행하는 경우

curl myurl | wc -l 

결과가 1823이고, 나는 다음과 같은 파일 foo.pl을 만들 경우 :

#!/usr/bin/perl 

my $url = 'myurl'; 

use LWP::Simple; 
my $content = get $url; 
die "Couldn't get $url" unless defined $content; 
print $content; 

실행

./foo.pl | wc -l 
결과가 다릅니다

1300에서 가끔은 1823입니다. 출력을 수동으로 검사하면 perl을 사용할 때 출력이 중간 라인에서 깨집니다.

무엇이 원인 일 수 있습니까?

+2

'컬'은 항상 작동합니까? 그냥 dodgy 서버일까요? 'Content-length' 헤더를 보셨습니까? –

+0

예, '컬 (curl)'은 항상 작동합니다. – jonderry

+0

우리는 문제를 재현 할 수없고 더 많은 정보를 제공합니다. – daxim

답변

1

버퍼링을 해제하면 어떻게됩니까? 또한 Karsten S.이 오류 코드에 대한 http 헤더를 확인하는 데 동의합니다. 마지막으로, 나는 또한 무슨 일이 일어나는 지 알기 위해 배열에 내용을 저장하려고한다.

버퍼링을 끄려면 use 문 뒤에 스크립트 상단에 $|++을 붙이기 만하면됩니다. 다시 한 번 어둠 속에서 쐈다.

http 헤더를 검사하려면 CGI을 사용할 수 있습니다. 여기에 요청에서 헤더를하는 방법에 대한 좋은 예와 작은 사이트는 다음과 같습니다

http://www.velocityreviews.com/forums/t24118-re-lwp-simple-header-information-problems.html

마지막으로, 웹 서버 대신 스칼라, $contents에서 내용을 저장하는 배열 @contents를 사용해보십시오. 필자는 과거에 Perl이 목록으로 잘못 해석 한 원격 서버에서 무언가가 전달 된 시간을 보았습니다. LWP::Simple이 (가)이 시간을 차지하고 있는지는 잘 모르겠지만 시도해보아야합니다. 데이터의 한 부분 만 가져오고 나머지는 덮어 쓰거나 모두 무시됩니다. 데이터를 배열에 배치하면 그 일이 발생하는지 확인할 수 있습니다.