更新
我从 API 资源管理器(定义了“id”字段)获取了工作请求(复制到 cURL),并将 URL 和授权标头中的 API 密钥替换为来自成功请求的请求(未定义“id”字段) . 运行此请求然后失败。因此,当使用我自己的凭据并出现 500 错误时,完全相同的标头(授权除外)和完全相同的请求(密钥除外)将失败。此外,这些相同的凭据能够向 Drive API 发出其他请求,因此它们实际上是有效的。
更新 2
这是从 API Explorer 中获取并删除的 cURL 请求。当这些被我自己的密钥/令牌替换时,请求会返回 500 错误。从其中删除了“(id)”的完全相同的请求,但是可以使用我自己的密钥/令牌。
curl 'https://content.googleapis.com/drive/v2/files?q=trashed%3Dfalse+and+%27root%27+in+parents&fields=items(id)%2CnextPageToken&key=<KEY>' -H 'Authorization: Bearer <TOKEN>' -H 'X-Goog-Encode-Response-If-Executable: base64' -H 'X-Origin: https://developers.google.com' -H 'X-ClientDetails: appVersion=5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_10_1)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F40.0.2214.115%20Safari%2F537.36&platform=MacIntel&userAgent=Mozilla%2F5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_10_1)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F40.0.2214.115%20Safari%2F537.36' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36' -H 'Referer: https://content.googleapis.com/static/proxy.html?jsh=m%3B%2F_%2Fscs%2Fapps-static%2F_%2Fjs%2Fk%3Doz.gapi.en.9OJnLZReRBQ.O%2Fm%3D__features__%2Fam%3DAQ%2Frt%3Dj%2Fd%3D1%2Ft%3Dzcms%2Frs%3DAGLTcCOvQmx_voM6JiXRxPIdYyD-EV0zsQ' -H 'X-JavaScript-User-Agent: google-api-javascript-client/1.1.0-beta' -H 'X-Referer: https://developers.google.com' --compressed
我的令牌已获得以下范围的授权:“ https://www.googleapis.com/auth/drive.file ”:“ https://www.googleapis.com/auth/userinfo.email ”:“ https:// www.googleapis.com/auth/drive.install ": " https://www.googleapis.com/auth/contacts.readonly ": " https://www.googleapis.com/auth/drive.appdata ": " https://www.googleapis.com/auth/plus.me ": " https://www.googleapis.com/auth/drive.metadata.readonly ": " https://www.googleapis.com/auth/ gmail.readonly "
原帖
几天前,每次页面加载都运行的 files.list 查询开始总是返回 500(内部服务器错误)响应。我正在使用 JS 谷歌客户端库来运行 files.list 请求。通过 API 资源管理器运行的相同请求正在运行。
我可以通过删除“fields”参数或将“fields”参数简化为“items,nextPageToken”而不是“items(id),nextPageToken”来使files.list请求成功。
运行请求的代码简化如下:
var request = gapi.client.drive.files.list(
{
fields: 'items(id),nextPageToken',
maxResults: 50,
q: "trashed=false and 'root' in parents",
pageToken: undefined
});
...
// Async
request.execute();
以下是从 API 资源管理器和页面(损坏和工作版本)发送的请求。除了来自 API 资源管理器的“q”参数的不同编码(以及一些标头......)之外,我没有看到它们之间的任何差异。鉴于不同的编码在没有指定“id”字段的情况下确实有效,并且用 API explorer 编码版本替换请求中的“q”参数并不能解决问题。
从 API Explorer 发送的请求 - 作品
https://content.googleapis.com/drive/v2/files?maxResults=50&q=trashed%3Dfalse+and+%27root%27+in+parents&fields=items(id)%2CnextPageToken&key=<API KEY>
请求从页面发送(带字段) - 损坏
https://content.googleapis.com/drive/v2/files?maxResults=50&q=trashed%3Dfalse%20and%20%27root%27%20in%20parents&fields=items(id)%2CnextPageToken&key=<API KEY>
请求从页面发送(不带字段) - 作品
https://content.googleapis.com/drive/v2/files?maxResults=50&q=trashed%3Dfalse%20and%20%27root%27%20in%20parents&fields=items%2CnextPageToken&key=<API_KEY>
我在这里遗漏了一些明显的东西吗?我是否未能以某种方式正确编码字段参数(encodeURIComponent 导致“无效请求”错误)?其他人可以重现相同的问题,或者他们已经看到了吗?
谢谢!