Получите ошибку «возможно, отправка автоматических запросов» в Google Drive API с использованием Soup (Vala) - PullRequest
0 голосов
/ 11 апреля 2020

API Google Drive время от времени возвращает ответ HTML страницы с содержанием:

<html>

<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Sorry...</title>
    <style>
        body {
            font-family: verdana, arial, sans-serif;
            background-color: #fff;
            color: #000;
        }
    </style>
</head>

<body>
    <div>
        <table>
            <tr>
                <td><b>
                        <font face=sans-serif size=10>
                            <font color=#4285f4>G</font>
                            <font color=#ea4335>o</font>
                            <font color=#fbbc05>o</font>
                            <font color=#4285f4>g</font>
                            <font color=#34a853>l</font>
                            <font color=#ea4335>e</font>
                        </font>
                    </b></td>
                <td style="text-align: left; vertical-align: bottom; padding-bottom: 15px; width: 50%">
                    <div style="border-bottom: 1px solid #dfdfdf;">Sorry...</div>
                </td>
            </tr>
        </table>
    </div>
    <div style="margin-left: 4em;">
        <h1>We\'re sorry...</h1>
        <p>... but your computer or network may be sending automated queries. To protect our users, we can\'t process
            your request right now.</p>
    </div>
    <div style="margin-left: 4em;">See <a href="https://support.google.com/websearch/answer/86640">Google Help</a> for
        more information.<br /><br /></div>
    <div style="text-align: center; border-top: 1px solid #dfdfdf;"><a href="https://www.google.com">Google Home</a>
    </div>
</body>

</html>

Это происходит при вызове конечной точки https://www.googleapis.com/drive/v3/files/file_id с помощью параметра "? alt = media "для того, чтобы получить содержимое файла.

Я не превысил квоту.

Я не получаю эту ошибку в других вызовах, таких как https://www.googleapis.com/drive/v3/files?q=trashed = False.

Ошибка возникает в приложении, которое я написал в Vala (https://github.com/bcedu/VGrive). Это приложение работало хорошо, не получая эту ошибку. Это начало происходить, когда Google изменил аутентификацию, вместо того, чтобы использовать токен доступа в параметре запроса, используя вместо этого заголовок HTTP. Я внес эти изменения, и проблема была решена в некоторых запросах (например, поиск файлов, как я уже упоминал), но я все еще получаю сообщение об ошибке, когда хочу загрузить файлы.

Я использую Google Drive api v3

Я использую библиотеку vala Soup (хорошо известную библиотеку Gnome https://developer.gnome.org/libsoup/unstable/) для выполнения запросов. Вы можете проверить ошибку с помощью следующего кода:


public static int main(string[] args) {
    // THIS DOESNT WORKS
    string method = "GET";
    string file_id = "";  // Some Google Drive File ID
    string uri = "https://www.googleapis.com/drive/v3/files/%s?alt=media".printf(file_id);
    string access_token = "";  // A valid acces_token

    Soup.Session session = new Soup.Session ();
    Soup.Message message = new Soup.Message (method, uri);

    message.request_headers.append("Authorization", "Bearer %s".printf(access_token));
    session.send_message (message);

    // Response is stored in message.response_body.data
    print("AUTOMATED QUERY ERROR:\n"+(string)message.response_body.data+"\n\n");


    // THIS WORKS
    uri = "https://www.googleapis.com/drive/v3/files?q=trashed = False and 'root' in parents";
    session = new Soup.Session ();
    message = new Soup.Message (method, uri);

    message.request_headers.append("Authorization", "Bearer %s".printf(access_token));
    session.send_message (message);

    // Response is stored in message.response_body.data
    print("THIS WORKS, SO TOKEN IS PASSES CORRECTLLY...\n"+(string)message.response_body.data+"\n");


    return 0;
}


Запустите тест с помощью:

valac --pkg libsoup-2.4 GoogleTest.vala
./GoogleTest

Вам потребуется установить:

  • libsoup- 2.4
  • vala c

Ожидается как успешный ответ, так и ошибка аутентификации, но нет страницы html, в которой говорится, что я делаю автоматические запросы. Это API, он предназначен для использования приложениями, а не только людьми.

Я что-то упустил из Google Drive API? Должен ли я сделать дополнительный шаг, чтобы передать жетон на предъявителя через суп?

1 Ответ

0 голосов
/ 20 апреля 2020

Как уже говорилось в комментариях, проблема отслеживается на форумах Google. https://issuetracker.google.com/153717392

Проблема, похоже, была решена, и у OP больше нет проблем с использованием API.

...