大量展示广告和Video 360 API 方法执行复杂的操作,操作时间可能超过 几秒钟即可完成对这些方法的请求有时会超出 预期延迟时间,导致 API 或客户端出错。本页列出了 处理因请求延迟时间过长而导致的问题。
增加客户端库中的默认超时时间
一些特定方法在其参考文档中进行了标记 超过预期延迟时间的情况其他方法 高延迟行为。
当出现以下情况时,某些客户端库的默认超时限制可能会导致错误: 发出高延迟请求部分受支持的客户端的默认超时 库:
- Java:20 秒
- Python:60 秒
- PHP:60 秒
可以通过提高这些默认超时值来避免客户端超时。关注 按照这些说明调整客户端库的默认超时时间 运行时:
Java
导入必要的资源。
import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpRequestInitializer; import java.io.IOException;
用于设置 HTTP 超时的构建函数。
/** * Adjusts HTTP timeout values used by the provided request initializer. * * @param requestInitializer The {@link HttpRequestInitializer} used to authorize requests. * @param newHttpTimeout The HTTP timeout for requests in seconds. * @return An {@link HttpRequestInitializer} with modified HTTP timeout values. */ private static HttpRequestInitializer setHttpTimeout( final HttpRequestInitializer requestInitializer, final int newHttpTimeout) { return new HttpRequestInitializer() { @Override public void initialize(HttpRequest httpRequest) throws IOException { requestInitializer.initialize(httpRequest); httpRequest.setConnectTimeout(newHttpTimeout * 1_000); httpRequest.setReadTimeout(newHttpTimeout * 1_000); } }; }
在创建展示广告和Video 360 API 客户端。
// Create authorized API client with non-default timeouts. DisplayVideo service = new DisplayVideo.Builder( credential.getTransport(), credential.getJsonFactory(), setHttpTimeout(credential, http-timeout-in-seconds) ) .setApplicationName("displayvideo-java-installed-app-sample") .build();
Python
导入 Google API Python 客户端库 http 模块。
from googleapiclient import http
更新了默认超时常量。
http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
Build API 服务 -
# Build the API service. service = discovery.build( 'displayvideo', 'v3', discoveryServiceUrl=discovery_url, credentials=credentials)
PHP
使用以下命令下载并安装 Guzzle HTTP 库 Composer。
composer require guzzlehttp/guzzle:^7.0
创建 Guzzle HTTP 客户端,并分配超时值。
$httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
创建 Google 客户端并分配 Guzzle HTTP 客户端。
$client = new Google_Client(); $client->setHttpClient($httpClient);
处理 API 超时错误
在极少数情况下,完成复杂操作的请求可能会超出
服务器端超时 180 秒,导致 API 返回 408
或 504
错误响应。
如果请求返回这些错误代码之一,我们建议您 请使用指数退避算法策略重试这些请求。
如果错误仍然存在,请使用联系表单与支持团队联系。