更改kriswallsmith / Buzz浏览器的默认值

时间:2014-09-26 13:45:21

标签: php symfony buzz

如何使用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);
}

1 个答案:

答案 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);

瞧。