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

时间:2014-08-12 15:56:40

标签: php guzzle

我在一组基于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忽略了基本网址的/api/{version}部分,并将请求发送到此处:

http://api.localhost/auth

但是,我原以为它会在这里提出要求:

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

我是否误读了文档并且我的预期行为是错误的,或者我是否需要启用其他选项才能使/auth网址附加到/api/1.0基本路径提出要求?

2 个答案:

答案 0 :(得分:12)

您在请求中使用绝对路径,因此它会覆盖基本URL中设置的路径。组合网址时,Guzzle遵循RFC 3986:http://tools.ietf.org/html/rfc3986#section-5.2

答案 1 :(得分:1)

我有一个倾斜的答案,可能会对那些喜欢与我一样的错字的人有所帮助。

它是base_uri,即“ uri ”。不是base_url,如“ url ”中的

设置base_url的结果类似于OP描述的问题-请求将不会基于已配置的基础。