内部 Laravel api 的 API 消耗失败 -cURL 错误 28:连接超时

问题描述 投票:0回答:2

这是我在点击 url 时收到的错误消息 http://localhost:8000/test
cURL 错误 6:无法解析主机:api(请参阅 https://curl.haxx.se/libcurl/c/libcurl-errors.html)了解 api/test

使用完整的 url 像这样 Http::get('http://localhost:8000/api/test')

出现此错误

cURL 错误 28:x 之后连接也超时

这里是定义 /api/test 路由的 api 文件

api.php

Route::get('/test', function(){
    return response()->json([
        'name' => 'John Doe',
        'address' => 'USA'
    ]);
});

web.php

Route::get('/test', [WebPostController::class, 'info']);

WebPostController.php

class WebPostController extends Controller
{

    public function info()
    {
        $response = Http::get('/api/test');

        $data = $response->json();
        return $data;
    }

P.S:外部 api 工作正常,但是在同一 laravel 应用程序内创建的内部 api 失败。 api 端点在 POSTMAN 中工作正常。

版本 - PHP 8.2.12 — Laravel 11.27.2

我想像这样从 api 端点获取数据

{
  "name": "X",
  "address": "Y",
}
php laravel curl
2个回答
0
投票

如果你改变

Http::get('/api/test')

Http::get('http://localhost:8000/api/test')

然后它可能会起作用..这是因为您传递的 URL 被“读取”为

http://api/test
并且主机名/域
api
无法解析为任何内容。

但是,如果您想访问应用程序中存在的端点,您可以跳过整个 HTTP 设置过程并直接访问该方法(从 Laravel 5 中的另一个控制器访问控制器方法):

app('App\Http\Controllers\ApiPostController')->getTest();

但最终,我建议将您要重用的代码移至共享库中。


0
投票

首先,问题无法解决,但这不是主要问题。但在收到这篇文章的评论后,我意识到为什么会发生这种情况。然后我遇到的首要问题是服务器在一定时间后让我超时。

好吧,问题是我用于 Laravel 的 php 默认服务器一次只能处理一个请求,所以当我通过 url 发出请求时,它无法一次处理多个请求(浏览器请求 + api 请求)所以我必须切换apache服务器,这解决了超时的问题。

#谢谢

© www.soinside.com 2019 - 2024. All rights reserved.