在同一系统上从一个 laravel 应用程序向另一个应用程序进行 Guzzle Http 调用时出现问题



我在使用Guzzle HTTP的laravel中遇到了一个奇怪的错误。我的本地主机中有 2 个应用程序 APP1(充当客户端)和 APP2(充当服务器)。APP1必须通过Guzzle HTTP调用APP2才能获取数据。 当我在 APP1 中调用 URL 时,该操作会调用 APP2 并返回响应。但是如果我们通过这种方式调用,我发现 APP2 使用的是 APP1 的 .env 和数据库连接。

为了确认这一点,我在APP2的操作中添加了代码。

return response()->json(['host' => DB::connection()->getConfig("host"), 'env_host' => env('DB_HOST')]);

如果我直接在浏览器上调用 APP2 网址,它会返回正确的结果:

{"host":"localhost","env_host":"localhost"}

但是如果我通过 Guzzle HTTP 从 APP1 到 APP2 进行 REST 调用,它会返回以下响应:

{"host":"localhostX","env_host":"localhostX"} //where localhostX is the value I added in .env file of APP1

这是咕噜咕噜的请求代码:

client = new Client([ 'base_uri' => 'http://localhost/app2/', 'http_errors' => true, 'allow_redirect' => true ]);
$response = $this->client->request('GET', $uri, []);
$responseCode = $response->getStatusCode();
$contentType  =  $response->getHeaderLine('content-type');
$responseBody = $response->getBody()->getContents();
dd($responseBody);

任何人都可以为此提供解决方案吗?我认为咕噜咕噜使 REST 不保持会话。

我已经提到了问题和答案 将 http 请求从一台 laravel 项目发送到同一台机器上的另一个项目时遇到问题。但是我没有看到这个问题的正确解决方案。

拉拉维尔版本 : 5.4 拉拉卡斯特链接 : https://laracasts.com/discuss/channels/laravel/laravel-guzzle-http-return-wrong-response

如果我将APP1和APP2放在不同的服务器(物理上分离的服务器)下,它可以按预期正常工作!!

我遇到了同样的问题。 经过一些研究,我发现问题来自"phpdotenv"。有关更多详细信息,请参阅此链接:当应用程序通过GuzzleHttp相互调用时,Laravel环境变量在应用程序之间泄漏

然后我继续在"phpdotenv"的问题跟踪器中进行研究,我发现这个:https://github.com/vlucas/phpdotenv/issues/219

PHP Artisan Config:Cache是使用Laravel时的好建议; 我们还需要另一种分离的phpdotenv解决方案; 这是一个烦人的错误。Waiting...@_@

就我而言,我最终运行了"php artisan config:cache"作为临时解决方案。

[编辑] 我在上一篇文章的这个链接上找到了更好的解决方案: https://laracasts.com/discuss/channels/general-discussion/env-not-reading-variables-sometimes

因此,与其在应用程序上的任何位置调用 env 函数,不如调用函数配置并在配置部分中添加变量。

最新更新