为什么我从谷歌驱动器休息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禁止服务器回复?的主要内容,如果未能解决你的问题,请参考以下文章