使用Qt5在Dropbox中使用auth的Http请求

时间:2016-12-22 10:09:38

标签: qt api http https dropbox

我尝试使用Qt实现对Dropbox文件的访问。我已经创建了应用程序。网站,dir创建了。但是我无法使用应用程序进行身份验证。 我已为此创建了测试请求。

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 =”我需要放什么?哪里可以找到那些链接?我只能通过添加sharelink从网站创建链接来获得此链接,我不认为它的工作原理是这样的。但即使有这个链接,我仍然会遇到错误

  

\ “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标头\“授权\”:期待\“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 \“:\”没有可用的auth功能   请求\“,\”错误\“:\”invalid_request \“}”

1 个答案:

答案 0 :(得分:0)

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

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

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

<强>更新

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

转到apps page

上的应用
  • Permission type设置为 Full Dropbox ,以便能够执行各种操作 运营
  • 点击Generated access token
  • 下的生成
  • 复制你的 令牌:例如2 ON ** _ *** 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

您将获得一个令牌,然后可以将该令牌与app密钥和密钥一起用于https://api.dropboxapi.com/oauth2/token

希望这可以帮助你挺身而出。