我有以下代码,其中我通过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函数中定义它?
答案 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版本和您的代码风格。