Проверка подлинности дождающего дайджеста с последовательными запросами

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

Только первый работает должным образом, второй генерирует исключение запроса с кодом состояния 401 (неавторизовано), что означает теряет учетные данные после первого запроса.

Следуйте кодекса:

class Alice
{
/**
* @var GuzzleHttpClient
*/
private $httpClient;

public function __construct(GuzzleHttpClient $client)
{
$this->httpClient = $client;
}

public function getAll(array $data)
{
$return = array();
foreach ($data as $uri) {
$return[] = $this->callEndpoint($uri);
}
return $return;
}

private function callEndpoint($uri)
{
$httpClient = $this->httpClient;
$response = $httpClient->get(
'http://foo.net/bar/' . $uri,
$this->requestOptions()
);
return $response->json();
}

private function requestOptions()
{
return array(
'auth' => array(
'user',
'password',
'digest'
),
'headers' => array(
'Accept'=>'application/vnd.foo+json; version=1.0',
),
);
}
}

Разрешаю это создавая новый экземпляр httpClient

  $httpClient = new $this->httpClient;

Но я не думаю, что это лучшее решение.

Могу ли я решить это без создания нового экземпляра?

1

Решение

Краткий ответ: да, можно делать несколько запросов без необходимости создавать новые экземпляры клиента.

Длинный ответ: проблема, с которой вы сталкиваетесь, заключается в том, что ваши параметры помещаются в объект запроса, а не в объект клиента. Несколько последующих запросов можно сделать, если вы разместите параметры на своем клиенте, например:

use GuzzleHttp\Client;
$client = new Client([
'base_url' => ['https://api.twitter.com/{version}/', ['version' => 'v1.1']],
'defaults' => [
'headers' => ['Foo' => 'Bar'],
'query'   => ['testing' => '123'],
'auth'    => ['username', 'password'],
'proxy'   => 'tcp://localhost:80'
]
]);`

Приведенный выше фрагмент кода взят из Guzzle Docs по созданию клиентов

В ответ на комментарий: есть также метод:

$client->setDefaultOption()

как видно из Исходный код клиента

Или вы можете изменить свой DIC …

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector