Как эмулировать время ожидания ответа или соединение отказано в Guzzle 3?

Я использую подписчиков событий в Guzzle 3 (в Goutte 1.0.6) для тестирования HTTP-операций без необходимости их выполнения. Так что, если я хочу увидеть, что происходит в 404, я просто делаю это:

class SavedPageLoaderPlugin implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(
'request.before_send' => 'onRequestBeforeSend',
);
}

/**
* Handles a Guzzle event before an HTTP op is attempted
*
* @param \Guzzle\Common\Event $event
* @throws \WebScraper\PauseException
*/
public function onRequestBeforeSend(Event $event)
{
// @var $request Guzzle\Http\Message\Request
$request = $event['request'];

// {{ Fetch $html and $htmlPage, removed for brevity }}

// Set a notification message for all subscribers, then set response
$response = new Response(
404,
$this->convertHeadersIntoKeyedArray($httpPage->getHeaders())
);
$response->setBody($html);
$request->setResponse($response);
}
}

Я нашел это отлично подходит для эмуляции сбоев (4xx / 5xx) и успешных операций (2xx), Guzzle правильно вызывает события успеха / неудачи на других моих плагинов в зависимости от обстоятельств.

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


Обновление: я только что заметил в MockPlugin класс запроса имеет getEventDispatcher() метод, который в свою очередь возвращает EventDispatcher класс с dispatch() метод. Похоже, это стоит изучить — все, что мне нужно сделать, это посмотреть, какие события вызваны реальными таймаутами или отказами в соединении, а затем добавить их самому в свой собственный плагин.

Я добавлю решение здесь, если у меня что-нибудь получится.

0

Решение

Задача ещё не решена.

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

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

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