代码之家  ›  专栏  ›  技术社区  ›  Gurushant GeneCode

为什么我要从google drive restapi获取服务器?

  •  0
  • Gurushant GeneCode  · 技术社区  · 6 年前

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

    我遵循了这个教程 Connecting your Qt application with Google Services using OAuth 2.0 并为它创建了自己的包装器类。在调用grant()函数之前,我已经完成了所有步骤。范围是 https://www.googleapis.com/auth/drive . 到目前为止一切正常。

    我用了信号 tokensReceived 发射自 QOAuthHttpServerReplyHandler 并存储了访问令牌。因此,简而言之,我能够验证我的应用程序并获得访问令牌。现在我的下一步是执行一个简单的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。现在我在设置之后,现在我得到了 错误字符串() 作为

    “传输时出错 https://www.googleapis.com/drive/v3/about -

    reply->readAll() 退货

    \“global\”,\n\“reason\”:\“required\”,\n\“message\”:\“The 此方法需要'fields'参数。\“,\n
    \“locationType\”:\“parameter\”,\n\“location\”:\“fields\”\n}\n ],\n\“code\”:400,\n\“message\”:\“字段”参数为 此方法需要。\“\n}\n}\n”

    编辑2:
    “而不是” https://www.googleapis.com/drive/v3/files ". 现在纠正它就行了。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Linda Lawton - DaImTo    6 年前

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

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

    您可以将它添加到代码中,也可以将它放在web浏览器中,因为它是一个HTTPGET调用。

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

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

    这是googledriveapi中未记录的必填字段。您必须将字段=*与所有请求一起发送。

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

    试着加上这个

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