3

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”吗?

4

2 回答 2

1

有点晚了,仅供参考。

你可以这样做\GuzzleHttp\Psr7\UriResolver::resolve($baseUri, $relUri);

它将相对 URI 转换为根据基本 URI 解析的新 URI。

$baseUri并且$relUri是 的实例\Psr\Http\Message\UriInterfaceUriInterface

于 2017-10-27T15:53:49.337 回答
1

您可以使用历史中间件,如宣传的那样工作:

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

于 2015-12-20T22:29:02.247 回答