Как я могу изменить параметры запроса на звонок с 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);
}
Учиться читать исходный код. На этой странице 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);
Вуаля.
Других решений пока нет …