使用Google API Client Library for Java更改批量HTTP请求的READ TIMEOUT

Piy*_*ain 6 java google-api-java-client google-admin-sdk google-directory-api

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

java.net.SocketTimeoutException : Read timed out
Run Code Online (Sandbox Code Playgroud)

要更改超时限制,这是我找到的解决方案: GoogleApps客户端仅提供SocketTimeOutException

但我无法更改我正在创建的Credential对象的超时.

Credential credential = new AuthorizationCodeInstalledApp(
                flow, new LocalServerReceiver()).authorize("user");
Run Code Online (Sandbox Code Playgroud)

注意:凭据实现HttpRequestInitializer.

提前致谢!

Piy*_*ain 6

很久以后发现了这个!有一个单独的HttpRequestInitializer对象用于批量HTTP和一个原子HTTP请求到谷歌.我之前已经更改了原子请求的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();
Run Code Online (Sandbox Code Playgroud)

这导致原子请求的设置读取超时.使用batch.execute()仍然发送的批处理请求具有默认读取超时.要为批处理请求更改相同内容,我在我的BatchRequest初始化中更改了此内容:

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.
                }
            });
Run Code Online (Sandbox Code Playgroud)