Google App Engine中的URL提取超时异常

时间:2014-08-27 13:24:39

标签: google-app-engine servlets

我正在尝试使用App引擎中的网址提取和目录服务来获取员工的全名

String url = "myurl"+email;
try {

      final URLFetchService urlFetchService = URLFetchServiceFactory.getURLFetchService();

    final HTTPRequest httpRequest = new HTTPRequest(new URL(url));
    final HTTPResponse httpResponse = urlFetchService.fetch(httpRequest);

    ByteArrayInputStream input = new ByteArrayInputStream(httpResponse.getContent());


 String driveJson = IOUtils.toString(input);
            JSONObject driveJsonObject = (JSONObject) JSONValue.parseWithException(driveJson);




if((JSONArray) driveJsonObject.get("items")==null){

}else{
      JSONArray driveJsonArray = (JSONArray) driveJsonObject.get("items");





    for(int i=0;i<driveJsonArray.size();i++){
          JSONObject firstGenre = (JSONObject) driveJsonArray.get(i);



             fName=firstGenre.get("firstName").toString();
             lName=firstGenre.get("lastName").toString();

             Fullname=fName+" "+lName;
    }
} 

错误详细信息:在获取网址时收到全名超时的错误:https://mydirectory.appspot.com/directory/v1/query/abc@sial.com

我只有几次这个例外。任何人都可以建议一个可能的解决方案。

我在Google App Engine常见问题解答中阅读以下内容

您可以为请求设置截止日期,即服务等待响应的最长时间。默认情况下,获取的截止时间为5秒。 HTTP请求的最长期限为60秒,任务队列和cron作业请求的最长期限为10分钟。使用URLConnection接口时,该服务使用连接超时(setConnectTimeout())加上读取超时(setReadTimeout())作为截止日期。

2 个答案:

答案 0 :(得分:2)

根据常见问题解答建议您应使用URLConnection代替URLFetchService。然后,您可以设置setConnectTimeout(..)setReadTimeout(..)

答案 1 :(得分:0)

或者你可以在fetchoptions中设置截止日期,soemthign如:

private FetchOptions fetchOptions = FetchOptions.Builder.withDefaults();

    public void doSomething() {
        fetchOptions.setDeadline(10d);
        HTTPRequest httpRequest = new HTTPRequest(url, HTTPMethod.GET, fetchOptions);
    }