Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法通过使用Reddit API的仅应用程序OAuth检索访问令牌_C++_Qt_Rest_Oauth 2.0_Reddit - Fatal编程技术网

C++ 无法通过使用Reddit API的仅应用程序OAuth检索访问令牌

C++ 无法通过使用Reddit API的仅应用程序OAuth检索访问令牌,c++,qt,rest,oauth-2.0,reddit,C++,Qt,Rest,Oauth 2.0,Reddit,因此,我已经阅读了以下链接中的文档。我正在尝试检索我的应用程序的访问令牌,该应用程序只需要OAuth,因为它不需要用户插入他们的凭据。我已经按照上面提到的页面上的说明进行了操作,但是我无法检索访问令牌,并且我始终获得: "{\"message\": \"Unauthorized\", \"error\": 401}" 这是我的密码: #include "reddit.h" #include <QtNetwork> #include <QUuid> const QSt

因此,我已经阅读了以下链接中的文档。我正在尝试检索我的应用程序的访问令牌,该应用程序只需要OAuth,因为它不需要用户插入他们的凭据。我已经按照上面提到的页面上的说明进行了操作,但是我无法检索访问令牌,并且我始终获得:

"{\"message\": \"Unauthorized\", \"error\": 401}"
这是我的密码:

#include "reddit.h"

#include <QtNetwork>
#include <QUuid>

const QString GRANT_URL  = "https://oauth.reddit.com/grants/installed_client";
const QString ACCESS_TOKEN_URL = "https://www.reddit.com/api/v1/access_token";
const QByteArray CLIENT_IDENTIFIER = "MYID";

Reddit::Reddit(QObject *parent) : QObject(parent)
{
    mDeviceID = "DO_NOT_TRACK_THIS_DEVICE";
    mAuthHeader = "Basic " + CLIENT_IDENTIFIER.toBase64();
}

void Reddit::getAccessToken()
{
    auto netManager = new QNetworkAccessManager(this);

    QUrl requestUrl = buildAccessTokenUrl();
    QNetworkRequest netRequest(requestUrl);
    netRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
    netRequest.setRawHeader("Authorization", mAuthHeader);

    auto reply = netManager->post(netRequest, requestUrl.query(QUrl::FullyEncoded).toUtf8());
    connect(reply, &QNetworkReply::finished, this, &Reddit::accessTokenRequestFinished);
}

void Reddit::accessTokenRequestFinished()
{
    auto reply = qobject_cast<QNetworkReply*>(sender());
    qDebug() << reply->readAll();

    reply->deleteLater();
}

QUrl Reddit::buildAccessTokenUrl()
{
    QUrl url(ACCESS_TOKEN_URL);

    QUrlQuery urlQuery;
    urlQuery.addQueryItem("grant_type", GRANT_URL);
    urlQuery.addQueryItem("device_id", mDeviceID);
    url.setQuery(urlQuery);

    return url;
}
#包括“reddit.h”
#包括
#包括
const QString GRANT_URL=”https://oauth.reddit.com/grants/installed_client";
常量QString访问\u令牌\u URL=”https://www.reddit.com/api/v1/access_token";
const QByteArray客户端_IDENTIFIER=“MYID”;
Reddit::Reddit(QObject*父对象):QObject(父对象)
{
mDeviceID=“不跟踪此设备”;
mAuthHeader=“Basic”+客户机_标识符.toBase64();
}
void Reddit::getAccessToken()
{
auto netManager=新的QNetworkAccessManager(此);
QUrl requestUrl=buildAccessTokenUrl();
QNetworkRequestNetRequest(请求URL);
setHeader(QNetworkRequest::ContentTypeHeader,“application/x-www-form-urlencoded”);
setRawHeader(“授权”,mAuthHeader);
自动回复=netManager->post(netRequest,requestUrl.query(QUrl::FullyEncoded.toUtf8());
连接(reply,&QNetworkReply::finished,this,&Reddit::accessTokenRequestFinished);
}
void Reddit::accessTokenRequestFinished()
{
自动回复=qobject_cast(发送方());
qDebug()readAll();
回复->删除稍后();
}
QUrl Reddit::buildAccessTokenUrl()
{
QUrl url(访问令牌url);
QUrlQuery urlQuery;
addQueryItem(“授予类型”,授予URL);
urlQuery.addQueryItem(“设备id”,mDeviceID);
setQuery(urlQuery);
返回url;
}

我已使用“已安装”类型选项在注册我的应用程序。

好,因此我发现了问题。我没有阅读,在我的授权标题中忘记了一个
,我将其修改为:

mAuthHeader = "Basic " + (CLIENT_IDENTIFIER + ":").toBase64();

不是您问题的解决方案,但Qt已经有了OAUTH库!其中一个例子是RedditAPI。检查嗯,是的,我已经看过了,并尝试使用该库实现,但是我发现文档有点混乱。我不明白是否以及如何实现“仅应用程序”OAuth,因为示例仅演示了基于用户的OAuth