### 在开发中经常面临一下 调用三方接口 如微信登录 微信支付 短信验证码 ... ... ### 我们 可以直接调用下面的方法 `url` 请求地址 `fields` 请求参数 ~~~ /** #### *curl请求 */ function curl ($url,$fields=[]){ $ch=curl_init(); //设置我们请求的地址 curl_setopt($ch,CURLOPT_URL,$url); //数据返回都不要直接显示 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //禁止证书校验 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); //判断是否是post请求 if($fields){ curl_setopt($ch,CURLOPT_TIMEOUT,30); curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$fields); } $data=''; if(curl_exec($ch)){ //发送成功,获取数据 $data=curl_multi_getcontent($ch); } curl_close($ch); return $data; } ~~~ * 同时请求多个接口 哪个先返回数据 先请求哪个接口 ~~~ public function test() { $urls = array( "http://lxr.php.net/", "http://www.php.net/", ); $mh = curl_multi_init(); foreach ($urls as $i => $url) { $conn[$i] = curl_init($url); curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1); curl_multi_add_handle($mh, $conn[$i]); } do { $status = curl_multi_exec($mh, $active); $info = curl_multi_info_read($mh); if (false !== $info) { $result = curl_multi_getcontent($info['handle']); // 这里获得每个cul的结果,如果结果是想要的就返回,不是就等下一个结果 echo $result; //return $result; } } while ($status === CURLM_CALL_MULTI_PERFORM || $active); foreach ($urls as $i => $url) { curl_close($conn[$i]); } } ~~~ ~~~ $urls = array( "http://lxr.php.net/", "http://www.php.net/", ); $mh = curl_multi_init(); foreach ($urls as $i => $url) { $conn[$i] = curl_init($url); curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1); curl_multi_add_handle($mh, $conn[$i]); } $result = ''; do { $status = curl_multi_exec($mh, $active); curl_multi_select($mh); $info = curl_multi_info_read($mh); if (false !== $info) { $result = curl_multi_getcontent($info['handle']); // 这里获得某个curl的结果,如果结果ok就break,不ok就等下一个结果 //$is_ok = your_check($result); $is_ok = 1; if ($is_ok) { break; } } } while ($status === CURLM_CALL_MULTI_PERFORM || $active); foreach ($urls as $i => $url) { curl_close($conn[$i]); } // 最快的正确结果 echo $result; ~~~