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
Вам потребуется установить:
Ожидается как успешный ответ, так и ошибка аутентификации, но нет страницы html, в которой говорится, что я делаю автоматические запросы. Это API, он предназначен для использования приложениями, а не только людьми.
Я что-то упустил из Google Drive API? Должен ли я сделать дополнительный шаг, чтобы передать жетон на предъявителя через суп?