什么是在PHP中使用CURLS的最佳approch?

时间:2018-05-06 12:09:23

标签: php curl

我有以下代码,其中我通过php CURL调用数据。

$URL = '//abc.com';   
$gb = curl_init();
curl_setopt($gb,CURLOPT_URL,$URL);
curl_setopt($gb,CURLOPT_RETURNTRANSFER,1);
curl_setopt($gb,CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($gb,CURLOPT_TIMEOUT,10);
curl_setopt($gb,CURLOPT_SSL_VERIFYPEER,false);
$res = curl_exec($gb);
curl_close($gb);
$data = json_decode($res,true);

如果我有多种URL变体(如

),调用CURL请求的最佳方法是什么?
1). //abc.com
2). //abc.com/abc
3). //abc.com/123

我应该多次调用CURL还是如何在php函数中定义它?

2 个答案:

答案 0 :(得分:1)

您可以执行类似

的操作
function curlRequest($url){
   $gb = curl_init();
   curl_setopt($gb,CURLOPT_URL,$url);
   curl_setopt($gb,CURLOPT_RETURNTRANSFER,1);
   curl_setopt($gb,CURLOPT_CONNECTTIMEOUT,10);
   curl_setopt($gb,CURLOPT_TIMEOUT,10);
   curl_setopt($gb,CURLOPT_SSL_VERIFYPEER,false);
   $res = curl_exec($gb);
   $data = json_decode($res,true);
   return $data;
}

$urls = ["http://url1","http://url2","http://url3"];

foreach($urls as $url){

   curlRequest($url);//do something with data

}

由于不同的路由检索不同的信息,因此我不会看到调用相同域或其他域的差异。如果所有这些网址都是等价的,那么您就不需要foreach或解决方案。

答案 1 :(得分:0)

取决于。

但如果您每次都连接到同一个网站/服务,您可以自由使用相同的连接。 这将允许您仅为连接设置一次参数(例如,cookie或其他标题)。

您也可以将 CURL 处理程序创建提取到分离的函数,然后只切换特定请求的URL。

您的代码应如下所示:

function init_my_curl() {
    $h = curl_init();

    curl_setopt($h, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($h, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($h, CURLOPT_TIMEOUT, 10);
    curl_setopt($h, CURLOPT_SSL_VERIFYPEER, false);

    return $h;
}

function do_request($handle, $url) {
    curl_setopt($handle, CURLOPT_URL, $url);
    $result = curl_exec($handle);

    return json_decode($result, true);
}

比你打电话:

$curl = init_my_curl();
do_request($curl, '//abc.com');
do_request($curl, '//abc.com/abc');
do_request($curl, '//abc.com/123');
curl_close($curl);

您也可以在课堂上包装所有内容,但这取决于您使用的PHP版本和您的代码风格。