如何使用Buzz Browser实例更改呼叫的请求选项?
我想为通话添加更长的超时时间。现在,如果旧版服务器需要更长时间x秒,它会触发和异常。我想延长此超时,因为旧服务器总是返回结果,但有时可能需要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);
}
答案 0 :(得分:9)
学习阅读source code。在那个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
属性设置为private,因此您必须找到一种方法。通过课程,您将find this:
public function getClient() { /* ... */ }
好。我们现在知道我们可以通过调用getClient()
来获取客户端。我们也知道客户端有setTimeout()
方法:
$buzz->getClient()->setTimeout(40);
瞧。