GuzzleHttp\Client 忽略base_url中的基本路径

2022-08-30 21:03:15

我正在一组 PHPUnit 支持的 REST API 测试中使用 Guzzle。

我按如下方式创建我的客户端:

use GuzzleHttp\Client;

$client = new Client(['base_url' => ['http://api.localhost/api/{version}', ['version' => '1.0']]]);

这工作正常,我可以使用以下代码发出请求:

$request = $client->createRequest('GET', '/auth');
$request->setBody(Stream::factory(json_encode(['test'=>'data'])));
$response = $client->send($request);
$decodedResponse = $response->json();

但是,Guzzle忽略了基本URL的部分,并向此处发出请求:/api/{version}

http://api.localhost/auth

但是,我本来希望它在这里提出请求:

http://api.localhost/api/1.0/auth

我是否误读了文档,因此我的预期行为是错误的,或者我是否需要启用其他一些选项才能使其在发出请求时将URL附加到基本路径?/auth/api/1.0


答案 1

您在请求中使用了绝对路径,因此它将覆盖基本 URL 中设置的路径。Guzzle 在组合 URL 时遵循 RFC 3986:https://www.rfc-editor.org/rfc/rfc3986#section-5.2


答案 2

我有一个倾斜的答案,可能会帮助那些像我一样容易出现相同类型拼写错误的人。

它是 ,这就是“uri”。不是 ,如“url”中所示。base_uribase_url

设置 a 的结果类似于 OP 描述的问题 - 请求不会在配置的基数上构建。base_url


推荐