base_uri 不是基于 guzzle 客户端实例化的

Posted

技术标签:

【中文标题】base_uri 不是基于 guzzle 客户端实例化的【英文标题】:base_uri not being based from guzzle client instantiation 【发布时间】:2015-08-30 07:09:18 【问题描述】:

我正在使用 lumen 尝试通过 guzzle 设置简单的 api 请求。

问题是base_uri 参数似乎没有在初始new Client() 上正确传递。

简化示例:

use GuzzleHttp\Client;

$client = new Client([
    'base_uri' => 'https://siteurl.com/api/v2'
]);

然后通过get调用api

$res = $client->get('orders', [
    'query' => [
        'status' => 'completed'
    ]
]);

不起作用。我一直小心不要使用像/orders 这样的绝对网址。如果我完全绕过 base_uri 并将其添加到 get 方法 $client->get('https://siteurl.com/api/v2/orders') 中,它可以工作。

我正在使用: “laravel/流明框架”:“5.0.*”, "guzzlehttp/guzzle": "^6.0"

*跟进:

我添加了调试标志,以便比较标头,明显的区别在于获取请求行。

get方法中的绝对url(绕过base_uri):

GET /api/v2/orders?status=completed HTTP/1.1

使用 base_uri(正在剥离版本):

GET /api/orders?status=completed HTTP/1.1

【问题讨论】:

你有没有发现这个问题?我遇到了完全相同的问题,并且我的 base_uri 确实按照答案中的建议以 / 终止。 无视我的评论。我正在查看我的 guzzle 版本的错误文档。最新版本使用 base_uri,而我又回到了使用 base_url 的先前版本。 @PaulZepernick 我建议的修复对你有用吗? @AvindraGoolcharan 我需要使用 base_url 而不是 base_uri。我正在查看最新的文档,它说要使用 base_uri,但我使用的是 5.3 版,所以我需要查看这个文档 docs.guzzlephp.org/en/5.3,它说要使用 base_url。在新版本中,密钥从 base_url -> base_uri 更改。 【参考方案1】:

您需要用正斜杠 / 终止您的 base_uri

例如,

use GuzzleHttp\Client;

$client = new Client([
    'base_uri' => 'https://siteurl.com/api/v2/'
]);

编辑:注意 base_uri 适用于 Guzzle 6+,而以前的版本使用 base_url。

【讨论】:

您的最后一条评论拯救了我。确认使用 base_url 并以正斜杠结尾的 url 适用于 Guzzle 5 这对我不起作用。我正在使用 Guzzle 6.3.3。我的客户端创建如下(敏感数据混淆)$client = new GuzzleHttp\Client([ 'base_uri' => 'https://****.corehr.com/ws/****/corehr/' ]); 然后我创建如下请求 $request = GuzzleHttp\Psr7\Request( 'GET', '/v1/filter/active/' );然后当我拨打$client->send($request) 之类的电话时,调用的端点是https://****.corehr.com/v1/filter/active 而不是https://****.corehr.com/ws/****/corehr/v1/filter/active 抱歉,请忽略我最后的评论。问题是相对 url 不能以/ 开头。所以$request = GuzzleHttp\Psr7\Request( 'GET', 'v1/filter/active/' ); 按预期工作。

以上是关于base_uri 不是基于 guzzle 客户端实例化的的主要内容,如果未能解决你的问题,请参考以下文章

基于 XML API 调用创建 Guzzle 服务定义

PHP - 为啥使用 Guzzle 而不是 cURL?

Guzzle 异步请求不是真正的异步?

guzzlehttp/guzzle

laravel 客户端 api 与 guzzle

将 Postman 请求转换为 guzzle 或其他 PHP HTTP 客户端