如何在使用curl_multi时防止503错误

时间:2014-09-28 19:48:56

标签: php curl curl-multi

我正在尝试同时获取10个网页。

我正在使用curl_multi。

但是,在大多数提取的网页上,我最终会遇到大量503(请求太多)错误。我该如何解决这个问题?

这是我运行的php脚本。 http://pastebin.com/HhrffciC

您可以在任何启用php的服务器上运行它。

以下是我机器上的输出结果。 http://i.imgur.com/dhnXJwz.jpg

1 个答案:

答案 0 :(得分: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解释了如何进一步使用该库。