在使用适用于 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? [关闭]