为什么我从谷歌驱动器休息api禁止服务器回复?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我从谷歌驱动器休息api禁止服务器回复?相关的知识,希望对你有一定的参考价值。

我的目标:

我正在尝试将我的Qt桌面应用程序与谷歌驱动器连接。现在我的目标很简单,即从我的驱动器获取所有文件的列表(以JSON格式)

到目前为止我做了什么。

我已经按照本教程Connecting your Qt application with Google Services using OAuth 2.0创建了我自己的包装类。我已经遵循了所有步骤,直到调用grant()函数。范围是https://www.googleapis.com/auth/drive。一切都很好,直到现在。

我使用从tokensReceived发出的信号QOAuthHttpServerReplyHandler并存储了access_token。所以简而言之,我能够验证我的应用程序并获取访问令牌。现在我的下一步是执行一个简单的get请求。这就是我所做的

void Google_Drive::Send_Request()
{
    QNetworkRequest request(QUrl("https://www.googleapis.com/drive/v3/files"));
    request.setRawHeader("Authorization", QByteArray("Bearer ")+mAccessToken);
    mManager.get(request);
}

我得到的错误:

我得到的回复是

“传输https://www.googleapis.com/drive/v3/files时出错 - 服务器回复:禁止”

请让我知道我错过了什么,或者我做错了什么。如果需要任何其他细节,请告诉我。谢谢!

编辑1: 回复接收方法这次我readAll()而不是只是阅读errorString(),我发现api没有打开。所以我从开发者控制台打开了api。现在我在设定之后现在我得到了errorString()

“传输https://www.googleapis.com/drive/v3/about时出错 - 服务器回复:错误请求”

并从reply->readAll()返回

“{ n ”error “:{ n ”errors “:[ n { n ”domain “:”global “, n ”reason “:”required “ , n “message ”:“此方法需要'fields'参数。”, n “locationType ”:“parameter ”, n “location ”:“fields ” n} n n], n “code ”:400, n “message ”: “此字段'参数是此方法所必需的。” n} n} n“

编辑2: 我道歉,测试我使用“https://www.googleapis.com/drive/v3/about”而不是“https://www.googleapis.com/drive/v3/files”的反应。现在纠正它工作正常。

答案

禁止最有可能意味着访问令牌或您应用它的方式有问题。

最简单的测试方法就是这样做

https://www.googleapis.com/drive/v3/files?access_token=Yourtoken

您可以将其添加到您的代码中,也可以将其置于Web浏览器中,因为它是一个http get调用。

如果访问令牌有效,那么您知道应用授权标头的方式有问题。

QString headerData = "Bearer " + mAccessToken;
request.setRawHeader("Authorization", headerData.toLocal8Bit());

此方法需要'fields'参数。

这是google drive api中未记录的必填字段。您必须发送包含所有请求的fields = *。

fields选择器指定要包含在响应中的字段子集。 有关详细信息,请参阅“性能提示”文档中的“部分响应”部分。用于获得更好的性能。

尝试添加这个

QNetworkRequest request(QUrl("https://www.googleapis.com/drive/v3/files?fields=*"));

以上是关于为什么我从谷歌驱动器休息api禁止服务器回复?的主要内容,如果未能解决你的问题,请参考以下文章

如何从谷歌驱动器获取修订内容

使用命令行从谷歌驱动器下载共享文件的最快方法是啥? [关闭]

是否可以使用 reactjs 从谷歌驱动器获取文件?

如何使用谷歌方向 API 在苹果地图上快速绘制路线?

谷歌驱动API下载文件-python-没有下载文件

如何使用 react-native-video 从谷歌驱动器播放视频?