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 客户端实例化的的主要内容,如果未能解决你的问题,请参考以下文章