如何为google API php客户端库设置超时

ff29svar  于 2023-05-05  发布在  PHP
关注(0)|答案(4)|浏览(231)

我正在使用Google的php client library来构建一个应用程序。有时,Google需要长达100秒的时间来响应API请求。我想将套接字超时限制为30秒。
有人知道这是怎么可能的吗?在文档中没有看到任何明确的例子,我也没有看到任何与超时相关的东西跳出来。
我确实在Java客户端的文档中找到了this example,但似乎找不到与之等效的PHP。
谢谢你的帮助

byqmnocz

byqmnocz1#

在Google API v2中,这可以通过Guzzle客户端完成

$http = $googleClient->getHttpClient();
$http->setDefaultOption('connect_timeout', 10);
$http->setDefaultOption('timeout', 10);
vxbzzdmp

vxbzzdmp2#

根据this issue,你可以直接将参数传递给curl。

$client->setClassConfig('Google_IO_Curl', 'options',
    array(
        CURLOPT_CONNECTTIMEOUT => 10,
        CURLOPT_TIMEOUT => 10
    )
);
xzabzqsa

xzabzqsa3#

我在v2.2.2上使用了这个:

$client->setConfig('CURLOPT_CONNECTTIMEOUT', 100); 
$client->setConfig('CURLOPT_TIMEOUT', 1000);
yhived7q

yhived7q4#

对于2.12.1版本,查看Google客户端类,这不会起作用。不确定其他版本。
$client->setConfig()-只是将配置添加到$config属性中,如果您在构造函数-new \Google\Client(['CURLOPT_TIMEOUT' => 100]);中传入配置,则相同。$config属性将保存此值,但不会将其传递到httpClient。
当包在createDefaultHttpClient()-〉www.example.com -〉中创建HttpClient时https://github.com/googleapis/google-api-php-client/blob/main/src/Client.php#L1182,它确实会传递base_urldefaults等,这取决于您拥有的Guzzle版本,但遗憾的是,与超时无关。因此,如果您将任何与超时相关的内容传递到配置中,则不会将其添加到HttpClient。

解决方案:

自己创建一个HttpClient类,设置超时并传入:

$this->client = new \Google\Client();
$httpClient = new \GuzzleHttp\Client(['timeout' => 7.0]);
$this->client->setHttpClient($httpClient);

希望这能帮上忙。

相关问题