2014-09-28 3 views
0

동시에 10 개의 웹 페이지를 가져 오려고합니다.curl_multi 사용 중 503 오류를 방지하는 방법

curl_multi를 사용하고 있습니다.

하지만 대부분의 가져온 웹 페이지에서 503 개 (너무 많은 요청) 오류가 발생합니다. 이 문제를 어떻게 해결할 수 있습니까?

다음은 내가 실행 한 PHP 스크립트입니다. http://pastebin.com/HhrffciC

모든 PHP 지원 서버에서 실행할 수 있습니다.

다음은 내 컴퓨터의 출력 모습입니다. http://i.imgur.com/dhnXJwz.jpg

+0

접촉하려는 서버가 여러 요청을 동시에 보내지 않는 것처럼 보입니다 (실제로 무력 공격을 막기 위해 현명합니다). 요청을 한 번에 하나씩 시도해보십시오. – wavemode

+0

답장을 감사드립니다. 그렇습니다. 문제는 내가 동시에 10 웹 페이지를 가져오고 싶습니다. 만약 내가 하나 하나씩하면 15-20 초가 걸리므로, 매분이 스크립트를 실행할 필요가 있기 때문에 많은 시간이 걸린다. curl_multi 함수를 구성하여 지연 요청을 실행하여 서버가 무차별 적으로 강제로 실행한다고 생각하지 않는지 궁금합니다. 같은 것을 성취하는 다른 방법도 인정 될 것이다. – tacoder

+0

json 데이터 만 반환 할 것이므로 PHP가 뇌에 통증이 생길 수 있으므로 단지 다른 언어를 사용하고 처리 할 수 ​​있습니다. 그 어떤 포인터도 감사하겠습니다. – tacoder

답변

1

동시 요청 수를 조절할 수있는 ParallelCurl 라이브러리가 있습니다. 아래 스크립트는 최대 값을 5로 설정하고 코드의 URL에 일련의 GET 요청을 보냅니다. 이 메시지가 503 오류를 표시하면 (나를위한 것이 아닙니다) 사용자의 필요에 따라 $max_requests을 낮출 수 있습니다.

<?php 

require __DIR__ . '/parallelcurl.php'; 

function on_request_done($content, $url, $ch, $search) { 
    echo $content; 
} 

$data = array(
    'http://www.codechef.com/status/CLETAB,tacoder', 
    'http://www.codechef.com/status/CRAWA,tacoder', 
    'http://www.codechef.com/status/EQUAKE,tacoder', 
    'http://www.codechef.com/status/MOU2H,tacoder', 
    'http://www.codechef.com/status/PRGIFT,tacoder', 
    'http://www.codechef.com/status/PUSHFLOW,tacoder', 
    'http://www.codechef.com/status/REVERSE,tacoder', 
    'http://www.codechef.com/status/SEASHUF,tacoder', 
    'http://www.codechef.com/status/SIGFIB,tacoder', 
    'http://www.codechef.com/status/TSHIRTS,tacoder' 
); 

$max_requests = 5; 
$parallel_curl = new ParallelCurl($max_requests); 

foreach ($data as $url) { 
    $parallel_curl->startRequest($url, 'on_request_done'); 
} 

$parallel_curl->finishAllRequests(); 

GitHub README는 라이브러리 사용 방법을 자세히 설명합니다.

+0

평판이 충분하지 않아 upvote 할 수 없습니다. 내가 찾는 완벽한 답. 대단히 감사합니다 !! – tacoder

+0

@tacoder Upvoted : D – Kalko