谷歌文档的谷歌API,请求文档列表--400错误请求。

5

在从谷歌服务器进行谷歌文档身份验证后,我执行了简单的getResponse操作,但是我收到了400错误请求。我不明白我的问题出在哪里。以下是示例代码:

  private void executeRefreshAlbums() {
        HttpRequest request = transport.buildGetRequest();
        request.url = GoogleDocsUrl.forDefaultPrivateFull();
        System.out.println("URL = "+request.url);
        try {
            HttpResponse response = request.execute();
            System.out.println("Response = "+response.getContent());

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

  }

sysout打印正确的URL:

03-12 17:36:59.573: INFO/System.out(451): URL = https://docs.google.com/feeds/default/private/full

但是当我这样做时,我得到了

03-12 17:43:41.360: WARN/System.err(3958): com.google.api.client.http.HttpResponseException: 400 Bad Request
03-12 17:43:41.415: WARN/System.err(3958):     at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:209)
03-12 17:43:41.415: WARN/System.err(3958):     at com.example.Test.executeRefreshAlbums(Test.java:198)
03-12 17:43:41.415: WARN/System.err(3958):     at com.example.Test.authenticated(Test.java:190)
03-12 17:43:41.415: WARN/System.err(3958):     at com.example.Test.authenticatedClientLogin(Test.java:156)
03-12 17:43:41.415: WARN/System.err(3958):     at com.example.Test.access$1(Test.java:153)
03-12 17:43:41.415: WARN/System.err(3958):     at com.example.Test$2$1.run(Test.java:139)
03-12 17:43:41.415: WARN/System.err(3958):     at android.os.Handler.handleCallback(Handler.java:587)
03-12 17:43:41.415: WARN/System.err(3958):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-12 17:43:41.415: WARN/System.err(3958):     at android.os.Looper.loop(Looper.java:123)
03-12 17:43:41.415: WARN/System.err(3958):     at android.app.ActivityThread.main(ActivityThread.java:4363)
03-12 17:43:41.415: WARN/System.err(3958):     at java.lang.reflect.Method.invokeNative(Native Method)
03-12 17:43:41.415: WARN/System.err(3958):     at java.lang.reflect.Method.invoke(Method.java:521)
03-12 17:43:41.422: WARN/System.err(3958):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
03-12 17:43:41.422: WARN/System.err(3958):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
03-12 17:43:41.422: WARN/System.err(3958):     at dalvik.system.NativeStart.main(Native Method)

非常感谢您的帮助。我已经尝试了一个小时,但没有成功 :-(


你遇到了同样的问题吗?有没有找到解决方案,请帮忙一下? - Harinder
1
@所有人,完整的解释请参考http://stackoverflow.com/q/7230435/689853。 - Harinder
2个回答

2
在另一个帖子中,用户@Merlin 提供了解决类似问题的方法。他的解决方案是在请求中指定API版本号3.0,正如“Google文档列表数据API”文档所述:
重要提示:如果您向 API 发送一个请求,使用了仅在版本 3 中可用的功能,但忘记设置版本号,那么您很可能会收到一个“400 Bad Request”响应。由于版本 2 和版本 3 之间的 URL 结构不同,这是 API 新用户经常犯的错误。
要指定版本号,请使用“GData-Version”HTTP 标头。该标头的值必须为“3.0”。小数点和零是必需的。
另外,您可以在 URL 中将“v=3”作为查询参数进行指定。这通常在工作环境中需要穿越防火墙时使用或从某些 JavaScript 请求中使用。建议尽可能使用 HTTP 标头。 https://docs.google.com/feeds/default/private/full?v=3

0

不确定你正在使用的transport对象是什么;

这里是一个简单的HttpGet请求:

        HttpGet getMethod = new HttpGet(URI);  
        HttpParams params   = new BasicHttpParams();                        
        HttpConnectionParams.setConnectionTimeout(params, 30000);
        HttpConnectionParams.setSoTimeout(params, 30000);

        DefaultHttpClient httpClient = new DefaultHttpClient(params);
        HttpResponse response        = httpClient.execute(getMethod);

        BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
        String returnString = "";
        String line = "";
        do
        {
         returnString += line;
         line = in.readLine();
        } while (line != null); 

也许使用这种方法,你会得到一个更明显的错误?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接