Tumblr API博客方法返回401“未授权”,但用户方法正常

3 投票
2 回答
3866 浏览
提问于 2025-04-17 03:17

有一段代码使用了xAuth认证来调用tumblr的API方法:

import urllib
import urlparse
import oauth2 as oauth

consumer_key     = "..."
consumer_secret  = "..."

consumer = oauth.Consumer(consumer_key, consumer_secret)
client = oauth.Client(consumer)

resp, content = client.request('https://www.tumblr.com/oauth/access_token', "POST", urllib.urlencode({
    'x_auth_mode': 'client_auth',
    'x_auth_username': '...@yandex.ru',
    'x_auth_password': '...'
}))

token = dict(urlparse.parse_qsl(content))
print token

token = oauth.Token(token['oauth_token'], token['oauth_token_secret'])
client = oauth.Client(consumer, token)

response, data = client.request('http://api.tumblr.com/v2/blog/good.tumblr.com/followers', method='GET') 
print data

这段代码在调用需要OAuth认证的用户方法时运行得非常好,来自tumblr API。但是,当我尝试调用任何博客方法,比如查看粉丝(/followers)时,它就出错了:

{"meta":{"status":401,"msg":"Not Authorized"},"response":[]}

有一点例外。如果我把我的博客名称作为{base-hostname}参数使用,它就能正常工作,没有任何错误。这真奇怪。这是怎么回事?代码有什么问题吗?

2 个回答

0

当你发送POST请求时,数据的类型必须设置为"multipart/form-data"。

我之前在使用Zend_Oauth(php)时也遇到过同样的问题,不过现在已经解决了。

1

这其实是因为你的OAuth访问令牌让你可以访问你的博客。OAuth不能让你访问你不拥有的博客方法,因为那样的话你就可以在别人的博客上发帖了。

撰写回答