Google API для Google Docs, запрашивающий список документов - 400 Bad Request - PullRequest
5 голосов
/ 13 марта 2011

После аутентификации на серверах Google для документов Google я выполняю простой 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)

Любая помощь будет очень признательна. Я пытался это в течение часа: - (

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

В другом потоке пользователь @Merlin предоставил решение, которое решило подобную проблему.Его решение заключалось в том, чтобы указать версию API 3.0 в запросе, как указано в документе " API данных списка документов Google ":

Важно : Есливы отправляете запрос в API, который использует функцию, доступную только в версии 3, но забыли установить версию, вы, скорее всего, получите ответ 400 Bad Request .Поскольку структура URL в версиях 2 и 3 различна, это обычная ошибка, допущенная новыми пользователями API.

Чтобы указать номер версии, используйте HTTP-заголовок GData-Version.Значение этого заголовка должно быть 3.0.Десятичные и нулевые обязательны.

GData-Version: 3.0

В качестве альтернативы вы можете указать v=3 в качестве параметра запроса в URL.Это часто необходимо при работе за брандмауэром, который удаляет заголовки HTTP, или из некоторых запросов JavaScript.По возможности рекомендуется использовать заголовок HTTP.

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

0 голосов
/ 05 сентября 2011

Не уверен, какой объект 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); 

Возможно, при использовании этого метода вы получите более очевидную ошибку?

...