如何从 Laravel 应用程序获取可用的 PSR-7 HTTP 客户端,而不局限于特定实现?

How to get a usable PSR-7 HTTP client from Laravel app without being restricted to a specific implementation?

提问人:Leif 提问时间:11/17/2023 更新时间:11/17/2023 访问量:40

问:

如何在 Laravel 9.52 上重现该问题:

$client = Illuminate\Support\Facades\Http::buildClient();
$response = $client->get('https://google.com');

您可以在 tinker 中轻松检查这一点。它恰好返回一个实例,但我只关心 PSR-7 兼容性,因为我想将客户端传递给需要 PSR-7 兼容客户端的库。GuzzleHttp\Client

但是客户端实际上不可用,第二行抛出未设置数组键的异常。"laravel_data"

它发生在第 1200 行:https://github.com/laravel/framework/blob/082345d76fc6a55b649572efe10b11b03e279d24/src/Illuminate/Http/Client/PendingRequest.php#L1200Illuminate/Http/Client/PendingRequest.php

我的方法似乎很明显,我确实寻找了很多替代方案,但无济于事。你是怎么做到的?

PHP 的 Laravel PSR-7

评论

0赞 Kolyunya 11/17/2023
这取决于您要让客户端进入的 Laravel 应用程序部分。控制器?服务?你在哪里需要它?
0赞 Denis Sinyukov 11/17/2023
你可以用,他不会给你难的。GuzzleHttp/client
0赞 miken32 11/18/2023
GuzzleHttp\Client工具,所以它应该可以满足您的需求。你可以只是为了得到客户。Laravel 的方法返回一个损坏的客户端这一事实对我来说似乎是一个错误,可能值得报告。Psr\Http\Client\ClientInterface$client = new GuzzleHttp\Client();buildClient()
0赞 apokryfos 11/18/2023
createClient而不是,但这本质上与执行@miken32建议的操作相同,您还需要提供一个消耗量大的处理程序堆栈。buildClient
0赞 Leif 11/20/2023
@apokryfos我试过了,同样的问题。

答: 暂无答案