Как использовать Guzzle 6 для создания 5 асинхронных запросов со следующими условиями:
- Все запросы начинаются одновременно
- Я хочу значение тайм-аута 500 мс для всех запросов. Если время запроса истекло, я НЕ хочу, чтобы он прерывал другие запросы
- Если запрос возвращает не-200, я НЕ хочу, чтобы он прерывал другие запросы.
- Все запросы находятся в разных доменах... (поэтому я не уверен, как это согласуется с настройкой
base_uri
...
Если все 5 запросов возвращают 200OK ‹ 500 мс, я хочу иметь возможность перебирать их ответы...
НО, если, скажем, у 2 из них не 200, а у 1 из них истекает время ожидания (более 500 мс), я хочу по-прежнему иметь доступ к ответам для 2 успешных.
EDIT Пока все работает, за исключением того, что тайм-ауты все еще вызывают исключение.
Вот что у меня было до сих пор:
<?php
require __DIR__.'/../vendor/autoload.php';
use GuzzleHttp\Client;
use GuzzleHttp\Promise;
$client = new Client([
'http_errors' => false,
'connect_timeout' => 1.50, //////////////// 0.50
'timeout' => 2.00, //////////////// 1.00
'headers' => [
'User-Agent' => 'Test/1.0'
]
]);
// initiate each request but do not block
$promises = [
'success' => $client->getAsync('https://httpbin.org/get'),
'success' => $client->getAsync('https://httpbin.org/delay/1'),
'failconnecttimeout' => $client->getAsync('https://httpbin.org/delay/2'),
'fail500' => $client->getAsync('https://httpbin.org/status/500'),
];
// wait on all of the requests to complete. Throws a ConnectException if any
// of the requests fail
$results = Promise\unwrap($promises);
// wait for the requests to complete, even if some of them fail
$results = Promise\settle($promises)->wait();
Guzzle\Http\Message\Response
объектов. Сбой одного запроса не приведет к сбою всего пула запросов. Любые исключения, возникающие при передаче пула запросов, будут объединены в исключениеGuzzle\Common\Exception\MultiTransferException
. Это комментарий из их документа. - person moyeen52   schedule 13.11.2018'http_errors' => false
... единственное, что осталось, это то, что тайм-ауты все еще вызывают исключение - person Tallboy   schedule 13.11.2018