【问题标题】:Failed to get request token on Tumblr - 301 error无法在 Tumblr 上获取请求令牌 - 301 错误
【发布时间】:2016-10-20 07:36:44
【问题描述】:

我正在尝试在 Android 上使用其 Tumblr API 2.0 (OAuth 1.0a) 登录 Tumblr。当我发送 getRequestToken 请求时,我收到“301 Moved Permanently”响应 -> 崩溃。 OAuth1Service 调试堆栈跟踪是:

10-20 10:20:34.455 2154-2387/com.package.android I/System.out: obtaining request token from http://www.tumblr.com/oauth/request_token
10-20 10:20:34.459 2154-2387/com.package.android I/System.out: setting oauth_callback to http://127.0.0.1
10-20 10:20:34.465 2154-2387/com.package.android I/System.out: generating signature...
10-20 10:20:34.466 2154-2387/com.package.android I/System.out: using base64 encoder: CommonsCodec
10-20 10:20:34.475 2154-2387/com.package.android I/System.out: base string is: POST&http%3A%2F%2Fwww.tumblr.com%2Foauth%2Frequest_token&oauth_callback%3Dhttp%253A%252F%252F127.0.0.1%26oauth_consumer_key%3DkizvGnMKiwPzfKNdLoGe4UXrO4EaCXa5UsEMOVvP6KkS2xZ8QQ%26oauth_nonce%3D1243319427%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1476948034%26oauth_version%3D1.0
10-20 10:20:34.475 2154-2387/com.package.android I/System.out: signature is: Jm8oRzCRHwuKiBg800CjW6tpioc=
10-20 10:20:34.476 2154-2387/com.package.android I/System.out: appended additional OAuth parameters: { oauth_signature_method -> HMAC-SHA1 , oauth_consumer_key -> kizvGnMKiwPzfKNdLoGe4UXrO4EaCXa5UsEMOVvP6KkS2xZ8QQ , oauth_version -> 1.0 , oauth_timestamp -> 1476948034 , oauth_nonce -> 1243319427 , oauth_callback -> http://127.0.0.1 , oauth_signature -> Jm8oRzCRHwuKiBg800CjW6tpioc= }
10-20 10:20:34.477 2154-2387/com.package.android I/System.out: using Http Header signature
10-20 10:20:34.484 2154-2387/com.package.android I/System.out: sending request...
10-20 10:20:34.488 2154-2387/com.package.android D/NetworkSecurityConfig: No Network Security Config specified, using platform default
10-20 10:20:34.868 2154-2387/com.package.android I/System.out: response status code: 301
10-20 10:20:34.868 2154-2387/com.package.android I/System.out: response body: <html>
10-20 10:20:34.868 2154-2387/com.package.android I/System.out: <head><title>301 Moved Permanently</title></head>
10-20 10:20:34.868 2154-2387/com.package.android I/System.out: <body bgcolor="white">
10-20 10:20:34.868 2154-2387/com.package.android I/System.out: <center><h1>301 Moved Permanently</h1></center>
10-20 10:20:34.868 2154-2387/com.package.android I/System.out: <hr><center>nginx</center>
10-20 10:20:34.868 2154-2387/com.package.android I/System.out: </body>
10-20 10:20:34.868 2154-2387/com.package.android I/System.out: </html>
10-20 10:20:34.870 2154-2387/com.package.android W/System.err: com.github.scribejava.core.exceptions.OAuthException: Response body is incorrect. Can't extract token and secret from this: '<html>
10-20 10:20:34.870 2154-2387/com.package.android W/System.err: <head><title>301 Moved Permanently</title></head>
10-20 10:20:34.870 2154-2387/com.package.android W/System.err: <body bgcolor="white">
10-20 10:20:34.870 2154-2387/com.package.android W/System.err: <center><h1>301 Moved Permanently</h1></center>
10-20 10:20:34.870 2154-2387/com.package.android W/System.err: <hr><center>nginx</center>
10-20 10:20:34.870 2154-2387/com.package.android W/System.err: </body>
10-20 10:20:34.870 2154-2387/com.package.android W/System.err: </html>

(消费者密钥和秘密是真实的,但来自一个虚拟帐户)

奇怪的是,就在昨天一切正常,我成功地收到了请求令牌。问题的原因可能是什么?

已更新/已解决 - 问题出在 ScribeJava TumblrApi 模型中。默认情况下,它包含带有“http”前缀的 URL,但实际的 Tumblr API 需要“https”

【问题讨论】:

  • 您能分享一下您的解决方案吗?你使用的是哪个 Tumblr api 版本?

标签: android oauth tumblr


【解决方案1】:

如果其他人有问题...创建一个新的“自定义 api”

public class TumblrHTTPSApi extends DefaultApi10a {
    private static final String AUTHORIZE_URL =   "https://www.tumblr.com/oauth/authorize?token=%s";

    protected TumblrHTTPSApi() {
    }

    private static class InstanceHolder {
        private static final TumblrHTTPSApi INSTANCE = new TumblrHTTPSApi();
    }

    public static TumblrHTTPSApi instance() {
        return InstanceHolder.INSTANCE;
    }

    @Override
    public String getAccessTokenEndpoint(){
        return "https://www.tumblr.com/oauth/access_token";
    }

    @Override
    public String getRequestTokenEndpoint() {
        return "https://www.tumblr.com/oauth/request_token";
    }

    @Override
    public String getAuthorizationUrl(OAuth1RequestToken requestToken) {
       return String.format(AUTHORIZE_URL, requestToken.getToken());
    }
}

然后可以照常使用这个“新 API”:

// create new oauth service
final OAuth10aService service = new ServiceBuilder()
    .apiKey(consumerKey)
    .apiSecret(consumerSecret)
    .callback(callbackUrl)
    .build(TumblrHTTPSApi.instance());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 2011-11-10
    • 2014-09-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    相关资源
    最近更新 更多