从curl multi exec中抓取多个卷曲手柄的内容?

时间:2010-12-31 03:07:56

标签: php curl

所以,基本上我需要获得大约100-200个网页的内容。我想使用curl_multi_ *以便我可以一次抓住它,但我不确定这是否可能。

我知道curl,你只需将returntransfer选项设置为true并输出执行,但是我如何使用curl_multi _ *?

如果不可能,还有其他办法吗?

2 个答案:

答案 0 :(得分:4)

我试图自己做同样的事情时偶然发现了这一点。我想我会添加我的解决方案来帮助将来遇到同样问题的人。首先,我假设你有一个卷曲处理程序的数组:

$mh = curl_multi_init();
$requests = array();
foreach ($someArray as $identifier => $url) {
    $requests[$identifier] = curl_init($url);
    curl_setopt($requests[$identifier], CURLOPT_RETURNTRANSFER, true);
    //any other options you need to set go here
    curl_multi_add_handle($mh, $requests[$identifier]);
}

我还假设您运行了请求:

do {
    $status = curl_multi_exec($mh, $running);
} while ($status === CURLM_CALL_MULTI_PERFORM || $running);

最后,我们得到你问题的答案:

$returned = array();
foreach ($requests as $identifier => $request) {
    $returned[$identifier] = curl_multi_getcontent($request);
    curl_multi_remove_handle($mh, $request); //assuming we're being responsible about our resource management
    curl_close($request); //being responsible again.  THIS MUST GO AFTER curl_multi_getcontent();
}

$returned现在包含您的所有数据。

答案 1 :(得分:-1)

使用curl multi interface很容易。

curl_multi接口提供了一种分组功能。

您可以通过简单的界面启动正常的卷曲操作,注册到多个手柄,一次执行多个作业,就是这样。

如果您使用的是PHP,请查看This页面(使用'curl multiple'搜索)。