flickcurl错误 - 方法flickr.oauth.access_token失败

时间:2013-06-17 23:28:26

标签: c++ oauth flickr

我在使用OAuth协议和flickcurl库的Flickr中进行身份验证时遇到问题。 我陷入了“创建访问令牌”的步骤。我有正确的oauth_client_key,oauth_client_secret,创建的request_token,request_token_secret,authorize_uri和Verifier集(如here所述),但flickcurl_oauth_create_access_token(...)函数返回错误,并生成消息:

  

flickcurl错误 - 方法flickr.oauth.access_token失败,错误为0(null)(HTTP 401)

我的申请:

#include <flickcurl.h>
#include "ConfigFile.h"
#include <string>
#include <iostream>

using namespace std;

int main()
{
    flickcurl_init();
    flickcurl *fc = flickcurl_new();

    ConfigFile cf(".flickcurl.conf");

    string oauth_client_key = cf.getValueOfKey("oauth_client_key");
    string oauth_client_secret = cf.getValueOfKey("oauth_client_secret");

    flickcurl_set_oauth_client_key(fc, oauth_client_key.c_str());
    flickcurl_set_oauth_client_secret(fc, oauth_client_secret.c_str());

    string oauth_token = cf.getValueOfKey("oauth_token");
    string oauth_token_secret = cf.getValueOfKey("oauth_token_secret");
    if (oauth_token.empty() || oauth_token_secret.empty())
    {
        if (flickcurl_oauth_create_request_token(fc, NULL))
            return 1;
        string request_token = flickcurl_get_oauth_request_token(fc);
        string request_token_secret = flickcurl_get_oauth_request_token_secret(fc);
        string uri = flickcurl_oauth_get_authorize_uri(fc);

        cout << "Application wants to link to your Flickr account. \n"
                "To authorize it go to: "<< uri << endl;
        cout << "Type in Verifier displayed on a page: ";
        string verifier;
        cin >> verifier;

        flickcurl_set_oauth_request_token(fc, request_token.c_str());
        flickcurl_set_oauth_request_token_secret(fc, request_token_secret.c_str());

        if (flickcurl_oauth_create_access_token(fc, verifier.c_str()))
            return 1;
        oauth_token = flickcurl_get_oauth_token(fc);
        oauth_token_secret = flickcurl_get_oauth_token_secret(fc);
    }
    flickcurl_set_oauth_token(fc, oauth_token.c_str());
    flickcurl_set_oauth_token_secret(fc, oauth_token_secret.c_str());

    flickcurl_free(fc);
    flickcurl_finish();

    return 0;
}

* ConfigFile只是一个简单的配置文件解析器。如果在配置文件中找不到oauth_token和oauth_token_secret,则必须创建(通过flickcurl_oauth_create_access_token()调用)。 错过了什么或我做错了什么?

1 个答案:

答案 0 :(得分:0)

我不确定您使用的是哪个版本的flickcurl但是在最后一个版本1.24中修复了一堆错误,而在即将发布的1.25中还有一些错误。为了做对,OAuth很难处理。

更具体地说,1.24中的这个提交可能会修复它:https://github.com/dajobe/flickcurl/commit/726c6737d7494f688a22f7a581bcadb61cf018d0