base_uri не основан на создании экземпляра клиента guzzle

Я использую lumen, пытаясь настроить простые запросы API через guzzle.

Проблема в том, что параметр base_uri неправильно передается в начальном new Client().

Упрощенный пример:

use GuzzleHttp\Client;

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

Затем вызов API через get

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

не работает. Я старался не использовать абсолютные URL-адреса, такие как /orders. Если я полностью обойду base_uri и просто добавлю его в метод получения $client->get('https://siteurl.com/api/v2/orders'), он сработает.

Я использую: "laravel/lumen-framework": "5.0.*", "жратьhttp/жрать": "^6.0"

*Дополнение:

Я добавил флаг отладки, чтобы можно было сравнить заголовки, и заметная разница заключается в строке запроса на получение.

Абсолютный URL в методе get (в обход base_uri):

ПОЛУЧИТЬ /api/v2/orders?status=completed HTTP/1.1

Использование base_uri (версия удаляется):

ПОЛУЧИТЬ /api/orders?status=completed HTTP/1.1


person drrobotnik    schedule 14.06.2015    source источник
comment
Вы случайно не догадались об этом? У меня точно такая же проблема, и мой base_uri завершается символом /, как это предлагается в ответе.   -  person Paul Zepernick    schedule 17.06.2015
comment
Не обращайте внимания на мой комментарий. Я смотрел неправильную документацию для своей версии guzzle. В новейшей версии используется base_uri, и я вернулся к предыдущей версии, в которой вместо этого использовался base_url.   -  person Paul Zepernick    schedule 17.06.2015
comment
@PaulZepernick Помогло ли вам исправление, которое я предложил?   -  person Avindra Goolcharan    schedule 17.06.2015
comment
@AvindraGoolcharan Мне нужно было использовать base_url вместо base_uri. Я просматривал последний документ, в котором говорится об использовании base_uri, но я использую версию 5.3, поэтому мне нужно было посмотреть этот документ docs.guzzlephp.org/en/5.3, в котором говорится об использовании base_url. Ключ изменен с base_url -> base_uri в новой версии.   -  person Paul Zepernick    schedule 17.06.2015


Ответы (1)


Вам нужно завершить свой base_uri косой чертой /

E.g.,

use GuzzleHttp\Client;

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

Изменить: Обратите внимание, что base_uri предназначен для Guzzle 6+, тогда как в предыдущих версиях использовался base_url.

person Avindra Goolcharan    schedule 16.06.2015
comment
Ваш последний комментарий меня спас. Подтверждено, что использование base_url с косой чертой в конце URL-адреса работает с Guzzle 5. - person Dylan Pierce; 26.06.2015
comment
Это не работает для меня. Я использую 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. - person giuliot; 15.11.2018
comment
Извините, проигнорируйте мой последний комментарий. Проблема в том, что относительный URL-адрес не должен начинаться с /. Так что $request = GuzzleHttp\Psr7\Request( 'GET', 'v1/filter/active/' ); работает как положено. - person giuliot; 15.11.2018