php使用curl下载https资源文件如何实现?
本文介绍了php使用curl下载https资源文件如何实现?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
代码如下:
$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
请问如何解决????
解决方案
补充代码=_=
<?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);
就可以了。
这篇关于php使用curl下载https资源文件如何实现?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文