5

Después de la autenticación de los servidores de google para google docs, hago un getResponse simple, pero obtengo una 400 Bad Request. No puedo entender dónde me estoy equivocando. El código de ejemplo es, por debajoGoogle API para Google Docs, solicitando una lista de documentos - 400 Bad Request

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(); 
     } 

    } 

la sysout imprime la dirección URL correcta como

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

pero cuando lo hago, me sale

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) 

Cualquier ayuda sería muy apreciada. He estado tratando durante una hora ahora :-(

+0

mismo problema hizo u obtener cualquier ayuda PLZ solución? – Harinder

+1

@Todas para una explicación completa, consulte http://stackoverflow.com/q/7230435/689853 – Harinder

Respuesta

2

En el otro usuario de hilo @Merlin provided la solución que resolvió un problema similar.Su solución fue especificar la versión API número 3.0 en la solicitud como se indica en el documento "Google Documents List Data API" ument:

Importante: Si usted hace una petición a la API que utiliza una característica única disponibles en la versión 3, pero se olvida de establecer la versión, lo más probable que reciba una respuesta Bad Request . Dado que la estructura de URL es diferente entre las versiones 2 y 3, este es un error común cometido por nuevos usuarios de la API.

Para especificar un número de versión, use el GData-Version encabezado HTTP. El valor de este encabezado debe ser 3.0. El decimal y el cero son obligatorios.

  GData-Version: 3.0

Alternativamente, puede especificar v=3 como parámetro de consulta en la URL. Suele ser cuando se trabaja detrás de un cortafuegos que retiene encabezados HTTP o desde algunas solicitudes de JavaScript. El uso del encabezado HTTP se recomienda cuando sea posible.

  https://docs.google.com/feeds/default/private/full?v=3

0

No está seguro de lo que el transport objeto Su uso es;

Aquí es un simple petición 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); 

Tal vez el uso de este método en lugar de eso obtendrá un error más obvio?

Cuestiones relacionadas