在使用适用于 Java 的 Google API 客户端库时更改批量 HTTP 请求的 READ TIMEOUT

Posted

技术标签:

【中文标题】在使用适用于 Java 的 Google API 客户端库时更改批量 HTTP 请求的 READ TIMEOUT【英文标题】:Change READ TIMEOUT for a batch HTTP Request on using Google API Client Library for Java 【发布时间】:2015-09-27 13:05:37 【问题描述】:

我正在批量请求将成员添加到组。为此,我使用 OAuth2.0 并获取类类型 Credential 的对象。执行时,batch.execute() 会抛出一个

java.net.SocketTimeoutException : Read timed out

要更改超时限制,这是我找到的解决方案: GoogleApps client giving SocketTimeOutException only

但我无法更改我正在创建的凭据对象的超时时间。

Credential credential = new AuthorizationCodeInstalledApp(
                flow, new LocalServerReceiver()).authorize("user");

注意:凭据实现 HttpRequestInitializer。

提前致谢!

【问题讨论】:

【参考方案1】:

找了好久才发现!批处理 HTTP 和对 Google 的原子 HTTP 请求有一个单独的 HttpRequestInitializer 对象。我之前更改了原子请求的 HttpRequestInitializer 对象(期望对批处理请求有相同的影响),如下所示:

new Directory.Builder(
                HTTP_TRANSPORT, JSON_FACTORY,new HttpRequestInitializer() 
            @Override
            public void initialize(HttpRequest httpRequest) throws IOException 
                credential.initialize(httpRequest);
                httpRequest.setConnectTimeout(3);  // 3 minutes connect timeout
                httpRequest.setReadTimeout(3);  // 3 minutes read timeout
                System.out.println("Hello"); // Just to track when a http request is made.

            
        ).setApplicationName(APPLICATION_NAME).build();

这导致了原子请求的设置读取超时。使用batch.execute() 发送的批处理请求仍然具有默认的读取超时。 为了对批处理请求进行相同的更改,我在 BatchRequest intializaiton 中进行了更改:

BatchRequest batch = service.batch(new HttpRequestInitializer() 
                @Override
                public void initialize(HttpRequest request) throws IOException 
                    credential.initialize(request);
                    request.setConnectTimeout(10 * 60000);
                    request.setReadTimeout(10 * 60000);
                    System.out.println(request.getReadTimeout() + 2); //Just to track when a batch http request is made.
                
            );

【讨论】:

超时值应该以毫秒为单位。

以上是关于在使用适用于 Java 的 Google API 客户端库时更改批量 HTTP 请求的 READ TIMEOUT的主要内容,如果未能解决你的问题,请参考以下文章

OAuth 2.0 适用于 Google 表格,但不适用于 Google Calendar API

如何使用适用于 iOS 的 Google Nearby Messages API 确定设备之间的距离

Google Places Autocomplete API“类型”参数仅适用于建立?

是否有适用于 Google 语音识别技术的 API? [关闭]

适用于 Android 的 Google Places API 未显示

使用适用于 android 的 google places api 网络服务搜索特定的附近地点