Изменить настройки по умолчанию для браузера kriswallsmith / Buzz

Как я могу изменить параметры запроса на звонок с Buzz Browser пример?

Я хотел бы добавить более длительное время ожидания вызова. Прямо сейчас это вызывает и исключение, если устаревший сервер занимает больше, чем х секунд. Я хотел бы продлить этот тайм-аут, поскольку устаревший сервер всегда возвращает результаты, но иногда это может занять до 40 секунд.

Я использую внутри контроллера Symfony2, вот мой код:

try {
$buzz = new Browser();
$legacyUrl = self::URL_LEGACY_SERVER . $urlSuffix .'?'. http_build_query($request->query->all());
$legacyResponse = $buzz->get($legacyUrl, array());
} catch (\Exception $e) {
return $this->sendError('Request to legacy server failed.', 500);
}

1

Решение

Учиться читать исходный код. На этой странице GitHub найдите «timeout».

Это покажет вам, что AbstractClient имеет timeout собственность и setTimeout() метод:

abstract class AbstractClient implements ClientInterface {
// [...]
protected $timeout = 5;
// [...]
public function setTimeout($timeout) {
$this->timeout = $timeout;
}
// [...]
}

Теперь вы должны подумать: «Как я могу добраться до этого объекта?». Поскольку вы используете Browser класс, это то, где вы должны начать.

Смотря на Browserконструктор, вы можете видеть, что он устанавливает client свойство к классу, который реализует ClientInterface:

public function __construct(ClientInterface $client = null, FactoryInterface $factory = null) {
$this->client = $client ?: new FileGetContents();
$this->factory = $factory ?: new Factory();
}

Так как вы не передаете аргументы конструктору, он установит для клиента экземпляр FileGetContents, который расширяется AbstractStream, который в свою очередь расширяется AbstractClient (просмотрите файлы и убедитесь сами).

Так как client свойство, установленное в Browserконструктор приватный, вам нужно будет найти способ добраться до него. Просматривая класс, вы будете найти это:

public function getClient() { /* ... */ }

Хорошо. Теперь мы знаем, что мы можем получить клиента, позвонив getClient(), Мы также знаем, что у клиента есть setTimeout() метод:

$buzz->getClient()->setTimeout(40);

Вуаля.

9

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

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