【问题标题】:Guzzle 6: Get URL that was "resolved" from base_uriGuzzle 6:获取从 base_uri “解析”的 URL
【发布时间】:2016-03-02 00:52:00
【问题描述】:

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

【问题讨论】:

  • 请注意,$client->get() 在版本 6 中返回一个响应对象。要获得有效的 URL,请查看 this answer

标签: guzzle6


【解决方案1】:

有点晚了,仅供参考。

你可以用\GuzzleHttp\Psr7\UriResolver::resolve($baseUri, $relUri);做到这一点

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

$baseUri$relUri\Psr\Http\Message\UriInterfaceUriInterface 的实例。

【讨论】:

    【解决方案2】:

    您可以使用历史中间件,按照宣传的方式工作:

    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

    【讨论】:

    • 获取RequestInterface实例的正确命令是:$request = $container[0]['request'];
    猜你喜欢
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 2017-02-11
    • 2015-12-09
    • 1970-01-01
    • 2017-12-13
    • 2015-08-30
    相关资源
    最近更新 更多