5

从谷歌服务器验证谷歌文档后,我做了一个简单的getResponse,但我得到了一个400错误的请求。我不明白我哪里错了。示例代码,下面谷歌文档的Google API,请求文档列表 - 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(); 
     } 

    } 

的系统输出打印正确的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) 

任何帮助将非常感激。我一直在尝试了一个小时,现在:-(

+0

同样的问题也u得到任何解决方案plz帮助? – Harinder 2011-08-30 07:55:55

+1

@所有的解释请参考http://stackoverflow.com/q/7230435/689853 – Harinder 2011-08-30 08:00:02

回答

2

在另一个线程user @Merlin provided解决方案解决了类似的问题。他的解决方案是在请求中指定API版本号3.0,如“Google Documents List Data API”doc ument:

重要:如果您在仅使用 中使用的功能在3版本的API请求,但忘了设置的版本,你会最 可能收到400错误的请求响应。由于版本2和3之间的URL结构不同,因此 API的新用户通常会犯这个错误。

要指定版本号,请使用 GData-Version HTTP标头。此标头的值必须为3.0。 十进制和零是必需的。

  GData-Version: 3.0

另外, 可以指定v=3作为URL中的查询参数。在处理从HTTP请求中去除HTTP头的防火墙或 时,通常需要使用 。如果可能,建议使用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); 

也许使用这种方法,而不是你会得到更明显的错误吗?