5

Après l'authentification des serveurs google pour google docs, je fais une simple getResponse, mais je reçois une 400 Bad Request. Je ne peux pas comprendre où je me trompe. L'exemple de code est ci-dessousGoogle API pour Google Docs, demandant une liste de documents - 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(); 
     } 

    } 

Le sysout imprime l'URL correcte comme

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

Mais quand je le fais, je reçois

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) 

Toute aide serait vraiment apprécié. J'ai essayé pendant une heure maintenant :-(

+0

même problème avez-vous obtenir de l'aide plz solution? – Harinder

+1

@All pour une explication complète, consultez http://stackoverflow.com/q/7230435/689853 – Harinder

Répondre

2

A l'autre utilisateur de thread @Merlin provided la solution qui a résolu le problème similaire Sa solution était de spécifier le numéro de version de l'API 3.0 dans la demande comme indiqué dans le document "Google Documents List Data API" ument:

Important: Si vous faites une demande à l'API qui utilise une fonction uniquement disponible dans la version 3, mais oubliez de définir la version, vous les plus recevra probablement un 400 Bad réponse à la demande. Depuis la structure d'URL est différente entre les versions 2 et 3, il s'agit d'une erreur commune faite par nouveaux utilisateurs de l'API.

Pour spécifier un numéro de version, utilisez l'en-tête HTTP GData-Version. La valeur de cet en-tête doit être 3.0. La décimale et le zéro sont requis.

  GData-Version: 3.0

Alternativement, vous pouvez spécifier v=3 comme paramètre de requête dans l'URL. Cela est souvent nécessaire lorsque vous travaillez derrière un pare-feu qui supprime les en-têtes HTTP, ou à partir de certaines requêtes JavaScript. L'utilisation de l'en-tête HTTP est recommandée lorsque cela est possible.

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

0

Je ne sais pas ce que l'transport votre objectera à l'aide est,

Voici une simple requête 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); 

en utilisant peut-être cette méthode plutôt que vous

Questions connexes