2013-10-31 6 views
0

파일 다운로드 전용 케이스가 있습니다. 큰 파일의 경우 청크 분할 다운로드를 수행해야하며 다운로드하기 전에 CGI 스크립트에 매개 변수를 전달해야합니다.LWP 큰 파일 다운로드 받기

정말 REST 인터페이스입니다. 나는 인터넷을 통해 모든 것을 검색했으며, 다운로드 부분에는 많은 것들이 있고, 매개 변수 부분에는 많은 것들이 있지만, 나는 그것들을 모으기 위해 갈 때 오류가 난다. 또한 비슷한 방식으로 POST를 수행하며 잘 작동합니다. 여기 내 코드 싹둑입니다 : 여기

# $filename, $target, $url, $bs, etc. are all set... 
my $bytes_received = 0; 

open (FH, ">", "$filename") or $logger->error("Couldn't open $filename for writing: $!"); 
my $ua = LWP::UserAgent->new(); 
my $res = $ua->get(
    $url, 
    ':content_cb' => \&callback, 
    'Content' => { 
    "api" => 'olfs', 
    "cmd" => 'rfile', 
    "target" => $target, 
    "bs" => $bs}); 

    print $logger->info("$bytes_received bytes received"); 

sub callback{ 
    my($chunk, $res) = @_; 
    $bytes_received += length($chunk); 
    print FH $chunk; 
} 

는 오류입니다 :

Not a SCALAR reference at /usr/local/share/perl5/HTTP/Message.pm line 163. 
at /usr/local/share/perl5/HTTP/Message.pm line 163 
    HTTP::Message::add_content('HTTP::Request=HASH(0x1956a88)', 'HASH(0x7fdfda565e88)') called at /usr/local/share/perl5/HTTP/Request/Common.pm line 111 
    HTTP::Request::Common::_simple_req(undef, undef) called at /usr/local/share/perl5/HTTP/Request/Common.pm line 20 
    HTTP::Request::Common::GET('http://10.0.0.15:8084/cgi-bin/olss.cgi', 'Content', 'HASH(0x7fdfda565e88)') called at /usr/local/share/perl5/LWP/UserAgent.pm line 410 
    LWP::UserAgent::get('LWP::UserAgent=HASH(0x191a220)', 'http://10.0.0.15:8084/cgi-bin/olss.cgi', ':content_cb', 'CODE(0x1845818)', 'Content', 'HASH(0x7fdfda565e88)') called at ./olfs_get.pl line 72 
Debugged program terminated. Use q to quit or R to restart, 
    use o inhibit_exit to avoid stopping after program termination, 
    h q, h R or h o to get additional info. 
    DB<3> print oct("764") 
500 
    DB<4> 

답변

1

$ UA -> GET ($ URL이)
$ UA -> GET ($ URL이, $ FIELD_NAME = > $ value, ...)

이 메서드는 주어진 $ url에 GET 요청을 전달합니다. 추가 인수는 요청의 헤더를 초기화하기 위해 제공 될 수 있습니다.

Content 헤더와 같은 것은 없습니다. ->post은 GET 요청에 사용되지 않는 message-body를 생성하기 위해 이것을 사용합니다. URL을 작성하려면 URI을 사용할 수 있습니다.

$를 UA -> 포스트 ($ URL이, $ FIELD_NAME => $ 값 ... 내용 => \ % 양식)
$ UA -> 포스트 ($ URL이, $ FIELD_NAME => $ 값, ... 내용 => \ @form)
$ UA -> 포스트 ($ URL이, $ FIELD_NAME => $ 값 ... 내용 => $ 콘텐츠)

+0

재미, 그래서 나는 '콘텐츠를 사용하고 'POST 할 때 내 서버 cgi는 $ param -> {'field '}를 사용하여이 컨텐트의 일부인 매개 변수에 액세스합니다. 내가 'Content'를 추가하려고 시도 할 때 헤더가 없으므로 오류가 발생합니다. 그래서 GET 요청을하면 CGI에서 $ field_name 키 값 쌍에 액세스하는 방법이 궁금합니다. 테스트를하고 모든 것을 덤프해야한다고 생각합니다. – tradetree

+0

서버 CGI 측에서 테스트를 수행하여 덤프에서 내 키/값 쌍을 찾을 수 없습니다. 내가하고있는 "my $ query = new CGI; 나의 $ rcvd_data = Dumper ($ query); print $ rcvd_data 그리고 나는 다음을 얻는다 : $ VAR1 = bless ({ '.parameters'=> [], 'use_tempfile'= >'.charset'=> 'ISO-8859-1', '. => 1 }, 'CGI'); – tradetree

+0

나머지 부분은 어디에 있습니까? (코드, 원하는 동작 등) – ikegami

관련 문제