PHP CURL GET HTTPS报错SSL certificate problem: unable to get local issuer certificate

请求HTTP

解决办法一:
1,使用php curl获取http资源,不会报错。
如下:

 /*
 * curl_get获取数据
 * */
function curl_get($url){
    $testurl = $url;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true) ;
    curl_setopt($ch, CURLOPT_URL, $testurl);
    //参数为1表示传输数据,为0表示直接输出显示。
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //参数为0表示不带头文件,为1表示带头文件
    curl_setopt($ch, CURLOPT_HEADER,0);
    $output = curl_exec($ch);
    if(curl_exec($ch) === false){
        echo 'Curl error: ' . curl_error($ch);
    }
    curl_close($ch);
    return $output;
}

2,假如请求的目标网站是https,会报错,报错信息如下
Curl error: SSL certificate problem: unable to get local issuer certificatebool(false)
这是因为HTTPS需要证书认证,如果本地没有装,就会报这个错误,我们可以把这个认证关掉。
代码如下:

 /*
 * curl_get获取数据
 * */
function curl_get($url){
    $testurl = $url;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true) ;
    curl_setopt($ch, CURLOPT_URL, $testurl);
    //参数为1表示传输数据,为0表示直接输出显示。
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //参数为0表示不带头文件,为1表示带头文件
    curl_setopt($ch, CURLOPT_HEADER,0);
    // 关闭SSL验证
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    $output = curl_exec($ch);
    if(curl_exec($ch) === false){
        echo 'Curl error: ' . curl_error($ch);
    }
    curl_close($ch);
    return $output;
}

解决办法二:
配置https证书
另外的一种解决办法,就是配置上HTTPS,找到证书:

网址:http://curl.haxx.se/ca/cacert.pem
下载pem文件。

在PHP配置文件(php.ini)里配置PEM文件目录位置。
curl.cainfo = "path\to\cacert.pem"

参考:https://blog.csdn.net/lilongsy/article/details/85012503

posted @   八戒vs  阅读(667)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示