2009-11-24 4 views
4

누군가가 WWW::Curl::Multi을 사용하는 실제적인 예가 있습니까?WWW :: Curl :: Multi의 예가 있습니까?

+0

가 WWW 아무 문제 찾는위한 서버에 게시물이 없습니다 않는 인터넷 :: 컬 Makefile.pl 에서 버전 체크를 제거했다 : : Curl :: 쉽고 컬 API를 이해합니다. WWW :: Curl :: Multi를 사용하여 멀티 스레딩 예제를 찾고 있습니다. – user218189

+0

그 페이지에 여러 예제가 있습니다 - 좀 더 구체적인 것을 찾고 계셨습니까? 당신이하려고하는 것에 대한 코드 스 니펫을 게시 할 수 있습니까? – Ether

+0

감사합니다. Evan, POE :: Component :: Client :: HTTP를 시도해 보겠습니다. @all : 이미 모든 매뉴얼을 읽었으며 Google로하는 방법을 알고 있습니다. 문제는 "누군가 WWW :: Curl :: Multi를 사용하는 __working__ 예제를 가지고 있습니까? 저는 독립 실행 형 바이너리로 매일 컬을 사용하고 스크립트에는 www : curl : easy를 사용합니다. 어떻게 작동하는지 매우 행복하지 않다. 나는 누군가가 이미 실용적인 생산적인 예를 가지고 있다고 생각했다. ... 나는 하루 이틀 정도 기다려야한다. 아무도 (: - /) 예제가 없다면 나는 에반에게 그 점을 줄 것이다. POE와 좋은 팁. – user218189

답변

3

은 지역 사회에 당신에게 통찰력을 제공하기 위해 : 내가 사용 알 결코WWW::Curl::Multi을했습니다. 압도적 인 다수는 POE::Component::Client::HTTP (ftp 및 기타 클라이언트의 경우 다른 클라이언트가 있음) 또는 Parallel::ForkManagerLWP으로 평행 한 http 요구를 만족시킵니다. 곱슬 곱슬 함이 좋지 않고 추가 된 다중 네트워크 기능이 좋지 않다는 것을 말하자면 실제로 다른 두 구현은 이 더 일반적이라고 말할 수 있습니다.

나는 curl multi가 PHP 커뮤니티에 대해 훌륭하게 작동한다는 것을 인정하고 싶습니다. 그리고 나는 perl 바인딩에 대해 나쁘지 않습니다.

4

curl homepage을 사용해 보셨습니까? CPAN documentation

이라고 말합니다.

이 모듈은 libcurl에 대한 Perl 인터페이스를 제공합니다. 독립 실행 형 모듈을위한 것이 아니므로 기본 libcurl 문서는 API 세부 정보 (http://curl.haxx.se)를 참조해야합니다. 지금 읽고있는 문서에는 Perl의 특정 세부 사항, 일부 샘플 코드 및 C API와 Perl의 차이점 만 포함되어 있습니다.

그러나, 주요 CPAN 페이지에 모두 WWW::Curl::EasyWWW::Curl::Multi의 예는이 : http://search.cpan.org/perldoc?WWW::Curl#WWW::Curl::Multi

3

모듈 용 테스트 슈트는 종종 예제를 찾는 데 적합합니다.

0

Net :: Curl :: Multi 살펴보기, 지금 실험 중입니다. 최소한 www 버전이 충돌 한 곳에서 작동합니다. 나는 libcurl에서의 최신 github의 버전을 사용하고이 예제는

use Net::Curl::Multi qw(:constants); 
use Net::Curl::Easy qw(:constants); 
my $start =shift; 
my $stop =shift; 
my $usetor=1; 
my $outdir = "outtest"; 
if (! -d $outdir) 
{ 
    mkdir $outdir or die "cannot makedir " . $outdir; 
} 
my $multi = Net::Curl::Multi->new(); 

foreach my $id ($start ... $stop) 
{ 
    my $file = $outdir . "/body_$id.html"; 
    if (
    (!-f $file)  || 
    (-z $file) 
    ) 
    { 

    my $easy = Net::Curl::Easy->new(); 

    if ($usetor) 
    { 
     $easy->setopt(CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4); 
     $easy->setopt(CURLOPT_PROXY,"localhost:9050"); #tor 
    } 


    $easy->setopt(CURLOPT_FOLLOWLOCATION, 1); 
    $easy->setopt(CURLOPT_TIMEOUT, 30); 
    $easy->setopt(CURLOPT_URL, 'http://www.example.com/searchform'); 

    $easy->setopt(CURLOPT_CUSTOMREQUEST,"POST"); 

    # extract these by looking at the headers 
     $easy->setopt(CURLOPT_POSTFIELDS,"ScriptManager=......&__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=&SearchField=${id}&OtherField=&SomeField=&ScrollTop=&__dnnVariable=&__VIEWSTATEENCRYPTED=&ButtonName=Search"); 

    $easy->setopt(CURLOPT_WRITEFUNCTION, 
       sub { 
       my $self=shift; 
       my $data=shift; 
       my $len = length($data); 
       open BODY, ">>$file" or die "cannot open $file";    
       print BODY $data; 
       close BODY; 
       warn "Write called: for $file and $len"; 
       return $len; 
       }  
     ); 

    $multi->add_handle($easy); 
    } 
} 

my $running = 0; 
do { 
    my ($r, $w, $e) = $multi->fdset(); 
    my $timeout = $multi->timeout(); 
    select $r, $w, $e, $timeout/1000 
     if $timeout > 0; 

    $running = $multi->perform(); 
    while (my ($msg, $easy, $result) = $multi->info_read()) { 
    warn "finished $msg $easy $result"; 
     $multi->remove_handle($easy); 

     # process $easy 
    } 
} while ($running); 
관련 문제