代码如下:
$url = 'https://www.xxx.com/xxx.mp3'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
var_dump(curl_error($ch)); 提示错误:SSL: certificate verification failed (result: 5)
然后网上搜了一大片:最多的解决方法是加上如下代码:
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, false);
加上之后又报错:
SSL: CA certificate set, but certificate verification is disabled
请问如何解决????
把你要爬的网址贴出来吧
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, false);
可用吧,平常这样没出现问题啊
百度https这样可以,你要爬那个地址
<?php $url = 'https://www.baidu.com/'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $output = curl_exec($ch); if (!$output) { echo curl_error($ch); } else { var_dump($output); } ?>
补充代码=_=
<?php $urls = [ "https://cdn.pixabay.com/photo/2017/01/28/21/48/lion-2016620__340.jpg 1x, https://cdn.pixabay.com/photo/2017/01/28/21/48/lion-2016620__480.jpg", "https://cdn.pixabay.com/photo/2017/02/20/19/29/architecture-2083687__340.jpg 1x, https://cdn.pixabay.com/photo/2017/02/20/19/29/architecture-2083687__480.jpg", "https://cdn.pixabay.com/photo/2017/02/06/12/34/reptile-2042906__340.jpg 1x, https://cdn.pixabay.com/photo/2017/02/06/12/34/reptile-2042906__480.jpg" ]; foreach ($urls as $k => $v) { if (!empty($v) && preg_match("~^http~i", $v)) { $nurl[$k] = trim(str_replace(' ', "%20", $v)); $curl[$k] = curl_init($nurl[$k]); curl_setopt($curl[$k], CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); curl_setopt($curl[$k], CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl[$k], CURLOPT_HEADER, 0); curl_setopt($curl[$k], CURLOPT_CONNECTTIMEOUT, 20); curl_setopt($curl[$k], CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl[$k], CURLOPT_SSL_VERIFYHOST, false); if (!isset($handle)) { $handle = curl_multi_init(); } curl_multi_add_handle($handle, $curl[$k]); } continue; } $active = null; do { $mrc = @curl_multi_exec($handle, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); while ($active && $mrc == CURLM_OK) { if (curl_multi_select($handle) != -1) { do { $mrc = curl_multi_exec($handle, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } } foreach ($curl as $k => $v) { var_dump(curl_error($curl[$k])); }
会有报错:
SSL: CA certificate set, but certificate verification is disabled
curl_setopt($curl[$k], CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
改成:
curl_setopt($curl[$k], CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6);
就可以了。