在Guzzle 3中,您可以获得解析的 URL(无需实际打开它),如下所示:
$client = new Client([
'base_uri' => 'http://foo.com',
]);
$request = $client->get('bar.html');
echo $request->getUrl();
在Guzzle 6中,这不再有效。还有其他方法可以得到“ http://foo.com/bar.html
”吗?
有点晚了,仅供参考。
你可以这样做\GuzzleHttp\Psr7\UriResolver::resolve($baseUri, $relUri);
它将相对 URI 转换为根据基本 URI 解析的新 URI。
$baseUri
并且$relUri
是 的实例\Psr\Http\Message\UriInterfaceUriInterface
。
您可以使用历史中间件,如宣传的那样工作:
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Middleware;
use Psr\Http\Message\RequestInterface;
$container = [];
$stack = HandlerStack::create();
$stack->push(Middleware::history($container));
$client = new Client([
'base_uri' => 'http://foo.com',
'handler' => $stack,
]);
$response = $client->request('GET', 'bar.html');
/* @var RequestInterface $request */
$request = $container[0]['request'];
echo $request->getUri();
如需参考,请参阅http://docs.guzzlephp.org/en/latest/testing.html#history-middleware。