我的目标:
我正在尝试将我的Qt桌面应用程序与Google驱动器连接。现在我的目标很简单,即从驱动器中获取所有文件的列表(以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 \”错误\“:{\ n \”错误\“:[\ n {\ n \”域\“: \“ global \”,\ n \“ reason \”:\“必填”,\ n \“ message \”:\“ 此方法需要'fields'参数。\“,\ n
\“ locationType \”:\“参数\”,\ n \“ location \”:\“字段\” \ n} \ n ],\ n \“ code \”:400,\ n \“ message \”:\“'fields'参数为 此方法必需。\“ \ n} \ n} \ n”
编辑2:
抱歉,为了测试响应,我使用的是“ https://www.googleapis.com/drive/v3/about”而不是“ https://www.googleapis.com/drive/v3/files”。现在纠正它可以正常工作。
答案 0 :(得分:1)
“禁止”很可能表示他们的访问令牌或您应用令牌的方式有问题。
最简单的测试方法是
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 = *。
字段选择器,指定要包含在响应中的字段子集。
有关更多信息,请参见性能提示文档中的部分响应部分。 用于提高性能。
尝试并添加此
QNetworkRequest request(QUrl("https://www.googleapis.com/drive/v3/files?fields=*"));