【问题标题】:base_uri not being based from guzzle client instantiationbase_uri 不是基于 guzzle 客户端实例化的
【发布时间】: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 更改。

标签: guzzle lumen


【解决方案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/' ); 按预期工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 2015-04-13
  • 2023-03-14
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
相关资源
最近更新 更多