【问题标题】:Http request for auth in Dropbox using Qt5使用 Qt5 在 Dropbox 中进行身份验证的 Http 请求
【发布时间】:2016-12-23 16:20:07
【问题描述】:

我尝试使用 Qt 实现对 Dropbox 上文件的访问。我已经关闭了创建应用程序。站点,目录已创建。但我无法使用应用程序进行身份验证。 我已经为此创建了这些测试请求。

QNetworkRequest request(QUrl("https://api.dropbox.com/1/metadata/link/"));
request.setRawHeader("Authorization", "Basic " + QString("keyApp:AppSecret").toLatin1().toBase64());
replyer = manager->post(request, "link=https://www.dropbox.com/sh/<DIR URL>?dl=0");

在“link=”上我需要放什么?我在哪里可以找到这些链接?我只能通过添加共享链接从站点创建链接来获取此链接,我认为它不会那样工作。但即使有这个链接,我仍然会收到错误

\"access_denied:unsupported_app_type\"}".

我也尝试过提出这些要求

QNetworkRequest request(QUrl("https://api.dropboxapi.com/2/auth/token/from_oauth1"));
request.setRawHeader("Content-Type", "application/json");
request.setRawHeader("Authorization", "Bearer тут accesTokenFromSite");
replyer = manager->post(request, "{\"oauth1_token\": \"whereFindThoseParam?\",\"oauth1_token_secret\": \""}");

我在哪里可以找到最后两个参数?使用默认值的请求我得到错误

“调用 API 函数时出错 \”auth/token/from_oauth1\”:无效 HTTP 标头 \"Authorization\":期待 \"Basic\" auth"

我也试过了

QUrl url("https://api.dropbox.com/1/oauth2/token");
url.setUserName("KEY");
url.setPassword("SECRET");
QNetworkRequest request(url);
request.setRawHeader("Content-Type", "application/json");
QHttpMultiPart *mpart = new QHttpMultiPart(this);
QHttpPart part1;
part1.setBody("grant_type=authorization_code");
mpart->append(part1);
QHttpPart part2;
part2.setBody("code=CODE");
mpart->append(part2);
replyer = manager->post(request, mpart);

但仍然出现错误:

"{\"error_description\": \"没有可用的验证函数 请求\", \"错误\": \"invalid_request\"}"

【问题讨论】:

  • 不是答案,但也许看看github.com/osoftteam/dropboxQt,如果它已经可以满足您的需要?
  • 看起来您正在尝试进行各种不同的 API 调用来执行不同的操作。你的实际目标是什么?

标签: qt api http https dropbox


【解决方案1】:

首先,您需要在 Dropbox 平台上创建一个新应用,以获取要在您开发的应用中使用的凭据(应用密钥和应用密码)。您可以在以下页面上进行操作:Create a new app on the Dropbox Platform

您应该通读Dropbox for HTTP Developers。在那里,您可以在下拉列表中选择您的应用程序(您在 Dropbox 上创建的应用程序)并填充访问令牌,然后您将获得现成的示例以使用 curl 进行测试。

一旦您对 http API 有足够的了解,您就可以开始在 Qt 中实现。检查QtDropbox 项目源(甚至构建并运行其测试客户端)可能是一个好主意。请注意,QtDropbox 目前仅支持API v1。您可以从here 找到 API v1 -> v2 迁移指南。

更新

要继续前进,请参阅以下步骤以生成访问令牌,以便能够为您自己的帐户进行 API 调用,而无需通过授权流程。要为其他用户获取访问令牌,您将必须实现文档中描述的标准 OAuth 流程,即使不是很清楚。

通过apps page访问您的应用

  • Permission type 设置为Full Dropbox 可以进行各种 操作
  • 点击Generated access token下的生成
  • 复制您的 令牌:例如2on**_M7cJ***Qe3gmtQJK

假设在 Dropbox 帐户的文件夹结构的根目录中有一个名为 misc 的文件夹。

使用 curl 列出文件夹内容:

curl -X POST https://api.dropboxapi.com/2/files/list_folder \
  --header 'Authorization: Bearer 2on**_M7cJ***Qe3gmtQJK' \
  --header 'Content-Type: application/json' \
  --data '{"path":"/misc"}'

你应该得到一个包含文件夹内容的 json 对象。

正如文档所述:Dropbox API explorer 是开始进行 API 调用的最简单方法。

要继续了解如何让您的应用访问其他人的 Dropbox 帐户(如果这是您的目标),请从您的应用打开以下页面到浏览器:

https://www.dropbox.com/oauth2/authorize?client_id=<your app key>&response_type=code

您将获得一个令牌,然后可以在调用 https://api.dropboxapi.com/oauth2/token 时使用该令牌以及应用密钥和密钥。

希望这可以帮助您前进。

【讨论】:

  • 阅读文档?谢谢,船长。我已经阅读了它,并尝试使用没有 Qt 的简单 curl,并创建了项目,并且我使用了我在那里看到的所有数据。但在 Qt 和 curl 上仍然出现错误(相同)。
  • 我回答的核心在第一段。您是否这样做了,然后返回文档并填充标记,然后尝试使用正确的标记而不是默认值?
  • 我已经得到了密钥应用和密钥,只是不要在请求中放在这里,就像我的密码、登录名和其他密钥一样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2017-11-11
  • 2014-09-06
  • 2023-03-31
  • 1970-01-01
  • 2016-04-28
相关资源
最近更新 更多