我在一组基于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
基本路径提出要求?
答案 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描述的问题-请求将不会基于已配置的基础。