Gae Java - 获取授权令牌(使用ClientLogin)后无法获取带有2个http请求的电子表格源URL

时间:2011-02-01 10:27:43

标签: google-app-engine spreadsheet google-sheets urlfetch

我在谷歌电子表格中使用谷歌应用引擎时遇到问题。 我使用另一个servlet(通过谷歌ClientLogin)获取授权令牌,然后我尝试使用GET请求和授权标头获取电子表格提要xml(如google文档所述)。

我的servlet看起来像这样:

public class My2Servlet extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {

    URLFetchService urlFetchService = URLFetchServiceFactory.getURLFetchService();

    HTTPRequest tokenRequest = new HTTPRequest(new URL("http://localhost:8888/myGae/getauthtoken"), HTTPMethod.GET);
    HTTPResponse tokenResponse = urlFetchService.fetch(tokenRequest);

    String token = Utils.getText(tokenResponse.getContent()); /*this token is OK*/

    HTTPRequest spreadsheetFeedRequest = new HTTPRequest(new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full"), HTTPMethod.GET);
    spreadsheetFeedRequest.setHeader(new HTTPHeader("Authorization", "GoogleLogin auth=" + token));
    HTTPResponse spreadsheetFeedResponse = urlFetchService.fetch(spreadsheetFeedRequest); /*here the problems!!!*/


    String spreadsheetFeed = Utils.getText(spreadsheetFeedResponse.getContent());

    resp.setContentType("text/plain");
    resp.getWriter().println(spreadsheetFeed);
} 

}

我可以正确拥有令牌,但是当我尝试执行第二个请求以获得电子表格供稿时,我有错误400错误请求,如果我重试重新加载此错误:

java.io.IOException: Could not fetch URL: https://spreadsheets.google.com/feeds/spreadsheets/private/full

似乎只有第一个请求工作...实际上如果我评论第二个请求并获得令牌然后注释第一个请求并使用令牌手写的第二个请求执行我正确地使用电子表格提供xml输出。 ..

为什么我不能执行2个后续请求?

由于

1 个答案:

答案 0 :(得分:0)

我已经实施了google-oauth(3-legged)&使用了gdata客户端库。我只是为FYI解释,因为这不是解决方案,而只是一个建议。

您可以从here下载。请参阅documentation

然后使用以下代码:

获取电子表格Feed:

SpreadsheetFeed resultFeed = googleService.getFeed(feedUrl, SpreadsheetFeed.class);
if (resultFeed.getEntries().isEmpty()) {
   out.println("<br/>|\tNo entries found.");
} else {
   List<SpreadsheetEntry> spreadsheets = resultFeed.getEntries();
   for (int i = 0; i < spreadsheets.size(); i++) {
       SpreadsheetEntry entry = spreadsheets.get(i);
       out.println("<br/>" + entry.getTitle().getPlainText());
   }
}