gpt4 book ai didi

php - 多个 curl 请求,何时关闭句柄?

转载 作者:可可西里 更新时间:2023-10-31 23:22:21 25 4
gpt4 key购买 nike

我对 curl 的 init()close() 函数感到困惑。我想知道在每种情况下我应该什么时候关闭 curl 句柄:
1. 使用单个句柄获取具有不同选项的“单个”URL。例如:

$curl=curl_init('google.com');
curl_setopt($curl,CURLOPT_FOLLOWLOCATION,true);
curl_exec($curl);

现在我想将 FOLLOWLOCATION 设置为 false。我应该执行 curl_close($curl),然后从头开始执行所有操作,还是只设置选项并像这样再次执行它:

curl_setopt($curl,CURLOPT_FOLLOWLOCATION,false);
curl_exec($curl);

2.使用单个句柄获取“多个”URL。例如:

$curl = curl_init('google.com');
curl_exec($curl);

现在我想获取 stackoverflow.com。我应该关闭句柄并从头开始,还是可以在不关闭句柄的情况下设置另一个 URL。像这样:

$curl = curl_init('stackoverflow.com');
curl_exec($curl);

3. 使用多句柄获取多个 URL。这是我的代码:

$CONNECTIONS=10;
$urls=fopen('urls.txt','r');
while(!feof($urls))
{
$curl_array=array();
$curl=curl_multi_init();
for($i=0;$i<$CONNECTIONS&&!feof($urls);$i++)
//create 10 connections unless we have reached end of file
{
$url=fgets($urls); //get next url from file
$curl_array[$i]=curl_init($url);
curl_multi_add_handle($curl,$curl_array[$i]);
}
$running=NULL;
do
{
curl_multi_exec($curl,$running);
}while($running>0);
for($i=0;$i<$CONNECTIONS;$i++)
{
$response=curl_multi_getcontent($curl_array[$i]);
curl_multi_remove_handle($curl,$curl_array[$i]);
curl_close(($curl_array[$i]));
}
curl_multi_close($curl);
}

如您所见:在获取每个单句柄的内容后,我从多句柄中删除句柄,关闭单句柄,然后在 for 循环后关闭多句柄。这种做法是否正确,还是我 Handlebars 柄盖得太紧了?
谢谢

最佳答案

when to close the handle?

简单地说,完成后关闭它。

解决您的具体问题:

  1. 如果您打算重复使用 curl 句柄(单一资源),请在完成后将其关闭。
  2. 如果您有多个 curl 句柄(多个资源),您可以像所示那样将它们与 curl_multi_* 函数一起运行,或者按顺序运行它们并在您需要时关闭 curl 句柄完成该资源(参见 #1)。
  3. 这对我来说是正确的。

请注意,如果您要重复使用 curl 句柄,请注意缓存、重定向和其他事项 option settings这可能会影响对同一资源的多个请求。

我鼓励您开发代码来请求每个资源一次。

关于php - 多个 curl 请求,何时关闭句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14712633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com