laravel中发起Http请求报错,apifox调试和axios请求可以通

1. 运行环境

windows11

1). 当前使用的 Laravel 版本?

laravel10
//: <> (使用 php artisan --version 命令查看)

2). 当前使用的 php/php-fpm 版本?

PHP 版本:
8.0.2
//: <> (使用 php --version 命令查看 php 版本)

php-fpm 版本:

3). 当前系统

4). 业务环境

5). 相关软件版本

2. 问题描述?

代码中发起Http请求报错,代码如下

<?php

use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Http;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    phpinfo();
    return view('welcome');
});

Route::get('/exchange', function () {
    try {
        $response = Http::get('https://www.baidu.com');
        // 检查请求是否成功  
        if ($response->getStatusCode() == 200) {
            // 获取响应内容  
            $data = $response->getBody()->getContents();

            // 解析响应内容(根据API返回的数据格式进行解析)  
            $jsonData = json_decode($data, true);

            // 使用响应数据  

        } else {
            // 请求失败处理  

        }
    } catch (\Exception $e) {
        dd($e->getMessage());
        return -1;
    }
});

报错信息:

cURL error 60: SSL certificate problem: unable to get local issuer certificate (see curl.haxx.se/libcurl/c/libcurl-err...) for www.baidu.com

同样的url在apifox、axios里面都是通的,大概查了一下说是证书的问题,但是我看apifox的设置里面也没启用证书

3. 您期望得到的结果?

laravel中发起Http请求报错,apifox调试和axios调试可以通

4. 您实际得到的结果?

报错信息:

cURL error 60: SSL certificate problem: unable to get local issuer certificate (see curl.haxx.se/libcurl/c/libcurl-err...) for www.baidu.com
laravel中发起Http请求报错,apifox调试和axios调试可以通

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
3周前 评论
__zhi (楼主) 3周前
讨论数量: 7
3周前 评论
__zhi (楼主) 3周前

请求https网址关闭ssl验证

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
3周前 评论
小猪蹄子 (作者) 3周前

// (可选)禁用SSL证书验证(请注意,这会使你的请求容易受到中间人攻击) curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

我是这样子写的

3周前 评论

不建议关掉 SSL 验证来解决问题,这很危险。


一般来说,最新版的 PHP 的 CURL 扩展里面是打包的有 cainfo 的,这种问题一般都出现在较旧的 PHP 版本,要解决这个问题,需要先下载 cainfo.pem,如果你可以修改 php.ini,那就直接修改 php.ini 里面的 curl.cainfo 配置项就好了,如果你不能修改 php.ini ,那也可以通过 curl_setopt 的 CURLOPT_CAINFO 选项来设置路径。

2周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!