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


multiple curl requests, when to close the handle?

我对curl的init()close()函数感到困惑。我想知道在以下每种情况下什么时候应该关闭卷曲手柄:
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循环后关闭多句柄。这种做法正确吗?还是我把把手盖得太紧了
感谢

什么时候关把手?

简单地说,你完成后就把它关上。

解决您的具体问题:

  1. 如果您计划重用curl句柄(单个资源),请在完成后关闭它
  2. 如果您有多个curl句柄(多个资源),您可以将它们与curl_multi_*函数一起运行,如图所示,或者按顺序运行它们,并在使用完该资源后关闭curl句柄
  3. 这在我看来是正确的

请注意,如果您正在重用curl句柄,请注意缓存、重定向和其他可能影响对同一资源的多个请求的选项设置。

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