Laravel Passport生成令牌时遇cURL 28超时错误求助
Laravel Passport 生成令牌时出现cURL超时错误的解决方案
问题分析
你遇到的cURL 28超时错误,本质是应用内部发起HTTP请求调用自身端点时,被服务器并发限制或本地网络解析问题阻塞。比如在XAMPP/Apache环境下,应用本身占用一个连接时,内部请求需要新的连接,若服务器并发数不足就会导致请求超时;或者localhost解析异常,无法正确路由到应用。
解决方案
方案1:直接调用Passport内部逻辑生成令牌(推荐)
不需要通过HTTP请求绕圈,直接用Passport内部服务生成令牌,彻底避免内部请求问题:
替换代码中Http::post的部分为以下内容:
use Laravel\Passport\Client; use Illuminate\Http\Request; // ... // 获取密码授权客户端 $client = Client::find(env('PASSPORT_PASSWORD_CLIENT_ID')); // 构造内部请求 $request = Request::create( '/oauth/token', 'POST', [ 'grant_type' => 'password', 'client_id' => $client->id, 'client_secret' => $client->secret, 'username' => $userData['email'], 'password' => $userData['password'], 'scope' => '', ] ); // 让应用直接处理该请求 $response = app()->handle($request); // 解析令牌数据 $tokenData = json_decode($response->getContent(), true); $user['token'] = $tokenData;
方案2:修正本地域名解析
将.env文件中的APP_URL从http://localhost:8000改为http://127.0.0.1:8000,避免localhost解析异常导致的请求失败:
APP_URL=http://127.0.0.1:8000
方案3:调整服务器并发设置(针对XAMPP/Apache)
修改Apache配置文件(httpd.conf),提升并发连接能力:
- 找到
MaxRequestWorkers(旧版本为MaxClients),设置为150或更大值 - 找到
MaxRequestsPerChild,设置为0或更大数值 - 重启Apache服务
方案4:避免使用php artisan serve
php artisan serve是单线程运行,内部请求会被阻塞超时。改用XAMPP/Apache或Nginx运行应用即可解决。
内容的提问来源于stack exchange,提问作者user24914143
相关产品推荐
相关产品推荐

