使用 Qt5 在 Dropbox 中进行身份验证的 Http 请求

Http request for auth in Dropbox using Qt5

我尝试过使用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=" 我需要放什么?我在哪里可以找到那些 link?我只能通过添加共享 link 从站点创建 link 来获得此 link,我不认为它是那样工作的。但即使这样 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\": \""}");

我在哪里可以找到最后两个参数?对于具有默认值的请求,我得到错误

"Error in call to API function \"auth/token/from_oauth1\": Invalid HTTP header \"Authorization\": expecting \"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\": \"No auth function available for given request\", \"error\": \"invalid_request\"}"

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

您应该通读 Dropbox for HTTP Developers. There you can select your app (the one you created on Dropbox) in the dropdown and populate access token and you get ready-made examples to test with curl

一旦您对 http API 有了足够的了解,您就可以开始在 Qt 中实现了。检查 QtDropbox project sources (and even build and run its test client). Note that QtDropbox currently supports only API v1. You can find API v1 -> v2 migration guide from here.

可能是个好主意

更新

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

apps page

上转到您的应用
  • 设置Permission typeFull 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 时连同应用密钥和密钥一起使用。

希望这能帮助你取得进步。