我该如何使用cURL同时向多个URL发送GET数据?

3

非常抱歉,我曾多次询问这个问题,但从未真正理解答案。

这是我的当前代码:

while($resultSet = mysql_fetch_array($SQL)){            
$ch = curl_init($resultSet['url'] . $fullcurl); //load the urls and send GET data
            curl_setopt($ch, CURLOPT_TIMEOUT, 2);           //Only load it for two seconds (Long enough to send the data)
            curl_exec($ch);                                 //Execute the cURL
            curl_close($ch);                                //Close it off 
} //end while loop

我所做的是从MySQL数据库($resultSet['url'])中取出URL,将一些额外的变量附加到它上面,即一些GET数据($fullcurl),然后请求这些页面。这会启动那些页面上的脚本,这就是这个脚本需要做的,只需启动这些脚本。它不需要返回任何输出,只需加载页面足够长的时间以启动脚本。
然而,目前它每次只加载一个URL(目前为11个)。我需要同时加载所有URL。我知道我需要使用curl_multi_,但我对cURL函数的工作原理毫不了解,因此我不知道如何更改我的代码以在while循环中使用curl_multi_。
所以我的问题是:
我如何更改这段代码以同时加载所有URL?请解释一下,而不只是给我代码。我想知道每个单独的函数究竟是干什么的。curl_multi_exec在while循环中是否有效,因为while循环只是逐行发送而已?
当然,任何关于cURL函数的参考、指南、教程都可以,最好不要来自php.net,因为虽然它做得很好,给我提供了语法,但它有点枯燥,解释得不够好。
编辑: 好的,zaf,以下是我当前的代码:
        $mh = curl_multi_init(); //set up a cURL multiple execution handle

$SQL = mysql_query("SELECT url FROM urls") or die(mysql_error()); //Query the shell table
                    while($resultSet = mysql_fetch_array($SQL)){   

        $ch = curl_init($resultSet['url'] . $fullcurl); //load the urls and send GET data
        curl_setopt($ch, CURLOPT_TIMEOUT, 2);           //Only load it for two seconds (Long enough to send the data)
        curl_multi_add_handle($mh, $ch);
    } //No more shells, close the while loop

        curl_multi_exec($mh);                           //Execute the multi execution
        curl_multi_close($mh);                          //Close it when it's finished.

可能是https://dev59.com/lXE85IYBdhLWcg3wnU0d的重复问题。 - John Conde
你认为呢?你连整个问题都没有读完吗? - Rob
你看了常见问题解答 (FAQ) 吗? - John Conde
1个回答

3
在您的while循环中,您需要针对每个URL执行以下操作:
  • 使用curl_init()创建一个curl资源
  • 通过curl_setopt(...)为资源设置选项
然后,您需要使用curl_multi_init()创建多个curl句柄,并使用curl_multi_add_handle(...)添加所有先前的单独curl资源。
最后,您可以使用curl_multi_exec(...)来执行操作。
这里有一个很好的例子: http://us.php.net/manual/en/function.curl-multi-exec.php

是的,请尝试一下,应该可以工作。如果不行,请回帖,我们会看看它。 - zaf
哦,另一个问题,我需要在关闭multi_exec之前删除handles吗? - Rob
额外说明:刚测试了一下,不起作用。我得设置一个数组。或许你也能帮我做到这一点? - Rob
是的,我对数组没有太多经验,现在正在php.net上查找。当我弄清如何定义数组时,我会再次发表评论 :) - Rob
嗯,zaf,我再看一遍,还是不太明白该怎么做。你能更详细地解释一下吗?抱歉。 - Rob
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接