我正在使用谷歌的php客户端库来构建一个应用程序。有时,谷歌需要100秒来响应一个API请求。我想将套接字超时限制为30秒。
有人知道这是怎么可能的吗?在文档中没有看到任何明确的例子,我没有任何超时相关的跳出在我看源代码。
我确实在Java客户端的文档中找到了这个例子,但我似乎找不到PHP的等效。
谢谢你的帮助
在Google API v2中,这可以通过Guzzle客户端完成
$http = $googleClient->getHttpClient();
$http->setDefaultOption('connect_timeout', 10);
$http->setDefaultOption('timeout', 10);
根据这个问题,你可以直接将参数传递给curl。
$client->setClassConfig('Google_IO_Curl', 'options',
array(
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 10
)
);
这个在v2.2.2上为我工作:
$client->setConfig('CURLOPT_CONNECTTIMEOUT', 100);
$client->setConfig('CURLOPT_TIMEOUT', 1000);
对于版本2.12.1
,查看Google客户端类,这不起作用。不确定其他版本。
$client->setConfig()
-只是将配置添加到$config属性中,如果您在构造函数中传递配置- new GoogleClient(['CURLOPT_TIMEOUT' => 100]);
,则相同。$config属性将保存这个值,但它不会传递给httpClient。
当包在createDefaultHttpClient()
->https://github.com/googleapis/google-api-php-client/blob/main/src/Client.php L1182→它确实传递base_url
, defaults
等取决于你有什么版本的Guzzle,但遗憾的是,与超时无关。所以,如果你传入任何与超时相关的配置,它只是不会被添加到HttpClient。
解决方案:
自己创建一个HttpClient类,设置超时并传入:
$this->client = new GoogleClient();
$httpClient = new GuzzleHttpClient(['timeout' => 7.0]);
$this->client->setHttpClient($httpClient);