Многие методы API Display & Video 360 выполняют сложные операции, выполнение которых может занять больше нескольких секунд. Запросы к этим методам иногда могут превышать ожидаемую задержку, что приводит к ошибкам на стороне API или клиента. На этой странице перечислены методы решения проблем, вызванных увеличенной задержкой запроса.
Увеличьте тайм-аут по умолчанию в клиентской библиотеке.
Несколько конкретных методов были помечены в справочной документации как регулярно превышающие ожидаемую задержку. Другие методы также могут периодически демонстрировать поведение с высокой задержкой.
Ограничения времени ожидания по умолчанию для некоторых клиентских библиотек могут привести к ошибкам при выполнении запросов с большой задержкой. Тайм-ауты по умолчанию для подмножества поддерживаемых клиентских библиотек:
- Ява : 20 секунд
- Питон : 60 секунд
- PHP : 60 секунд
Таймаутов на стороне клиента можно избежать, увеличив эти таймауты по умолчанию. Следуйте этим инструкциям, чтобы настроить время ожидания по умолчанию для вашей клиентской библиотеки во время выполнения:
Ява
Импортируйте необходимые ресурсы.
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); } }; }
Вызовите функцию при создании клиента API Display & Video 360.
// 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();
Питон
Импортируйте http-модуль клиентской библиотеки Google API Python.
from googleapiclient import http
Обновить константу тайм-аута по умолчанию.
http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
Создайте службу API.
# Build the API service. service = discovery.build( 'displayvideo', 'v3', discoveryServiceUrl=discovery_url, credentials=credentials)
PHP
Загрузите и установите HTTP-библиотеку Guzzle с помощью Composer .
composer require guzzlehttp/guzzle:^7.0
Создайте HTTP-клиент Guzzle, назначив значение таймаута.
$httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
Создайте клиент Google и назначьте HTTP-клиент Guzzle.
$client = new Google_Client(); $client->setHttpClient($httpClient);
Обработка ошибок тайм-аута API
В редких случаях запросы, выполняющие сложные операции, могут превышать тайм-аут на стороне сервера в 180 секунд, в результате чего API возвращает ответ с ошибкой 408
или 504
.
Если в ответ на запрос выдается любой из этих кодов ошибки, мы рекомендуем повторить эти запросы, используя стратегию экспоненциальной задержки .
Если ошибка не исчезнет, обратитесь в службу поддержки, используя контактную форму .