如何使用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);
}
Run Code Online (Sandbox Code Playgroud)
学习阅读源代码.在那个GitHub页面上搜索"超时".
它会告诉你AbstractClient有一个timeout属性和setTimeout()方法:
abstract class AbstractClient implements ClientInterface {
// [...]
protected $timeout = 5;
// [...]
public function setTimeout($timeout) {
$this->timeout = $timeout;
}
// [...]
}
Run Code Online (Sandbox Code Playgroud)
现在你应该思考,"我怎样才能达到那个目标?".由于您正在使用Browser该类,因此您应该从这里开始.
查看Browser构造函数,您可以看到它将client属性设置为实现的类ClientInterface:
public function __construct(ClientInterface $client = null, FactoryInterface $factory = null) {
$this->client = $client ?: new FileGetContents();
$this->factory = $factory ?: new Factory();
}
Run Code Online (Sandbox Code Playgroud)
由于您没有将任何参数传递给构造函数,因此它会将客户端设置为FileGetContents扩展的实例,AbstractStream然后扩展AbstractClient(通过文件并亲自查看).
由于在构造函数中client设置的属性Browser设置为私有,因此您必须找到一种方法.通过课程,你会发现:
public function getClient() { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
好的.我们现在知道我们可以通过电话联系客户getClient().我们也知道客户端有一个setTimeout()方法:
$buzz->getClient()->setTimeout(40);
Run Code Online (Sandbox Code Playgroud)
瞧.
| 归档时间: |
|
| 查看次数: |
1763 次 |
| 最近记录: |