如何将多个cURL请求合二为一?

时间:2015-02-20 11:14:10

标签: php curl

这是我目前使用的代码

function curl_get_contents($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    $data = curl_exec($ch);
    return $data;
}

function meta_scrap($filename, $other, $programming) {
    $link = 'https://graph.facebook.com/?id=' . $filename . '&scrape=true&method=post';
    $output = curl_get_contents($link);
    $output = json_decode($output);
    $ogtitle = $output->title;
}

我在一个网页上拨打meta_scrap($filename); 8次。这使得页面加载速度非常慢。有什么我可以做的吗?我读到curl_multi_init()我试图像这样使用它

function curl_get_contents($pages) {
    $ch = curl_init();
    $ch = array();
    $mh = curl_multi_init();
    for ($i = 0; $i < count($pages); $i++) {
        $page = $pages[$i];
        $ch[$i] = curl_init();
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, $page);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_multi_add_handle($mh, $ch[$i]);
    }

    $running = 0;
    do {
        curl_multi_exec($mh, $running);
    } while ($running > 0);

    $data = curl_exec($ch);
    $results = reset(json_decode(curl_multi_getcontent($ch[$i]), true));
    $resultCount = count($results);

    curl_close($ch);
    return $data;
}

有了这个,我没有输出?任何人都可以帮我修改我的代码,以便它提供正确的输出吗?

2 个答案:

答案 0 :(得分:1)

您似乎已经开始处理多个请求,然后在此处剪切并粘贴一个curl请求处理程序:

$data = curl_exec($ch);
$results = reset(json_decode(curl_multi_getcontent($ch[$i]), true));
$resultCount = count($results);

....但是我无法想象你会在哪里找到使用reset()的代码。

你试图把响应放到$ results中,然后你抛弃这个数组并返回完全不同的东西。

试试这个......

...
$running = count($pages);
do {
   curl_multi_exec($mh, $running);
   usleep(5000);
} while ($running > 0);

$responses=array();
for ($i = 0; $i < count($pages); $i++) {
   $responses[$i]=json_decode(curl_multi_getcontent($ch[$i]), true);
}
return $responses;

如果您将重复使用该功能,那么您还应该移除并关闭每个卷曲手柄,然后在返回之前关闭多手柄。

另请参阅我的recent blog post about curl_multi_exec()。

答案 1 :(得分:0)

我不太了解,但这可能会对你有所帮助。

http://arguments.callee.info/2010/02/21/multiple-curl-requests-with-php/