【问题标题】:Why does Python Requests throw this error when attempting to use it with Tumblr?为什么 Python 请求在尝试与 Tumblr 一起使用时会引发此错误?
【发布时间】:2012-12-09 16:27:47
【问题描述】:

这是我的 Oauth 代码:

auth = OAuth1(client_key=consumer_key,
              client_secret=consumer_secret,
              resource_owner_key=access_key,
              resource_owner_secret=access_secret,
              signature_type='auth_header')

r = requests.get(url, auth=auth)
print r

错误:

   r = requests.get(url,auth = auth)
  File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 49, in get
    return request('get', url, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 38, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 259, in request
    prep = req.prepare()
  File "/usr/local/lib/python2.7/dist-packages/requests/models.py", line 197, in prepare
    p.prepare_auth(self.auth)
  File "/usr/local/lib/python2.7/dist-packages/requests/models.py", line 329, in prepare_auth
    r = auth(self)
  File "/usr/local/lib/python2.7/dist-packages/requests_oauthlib/core.py", line 41, in __call__
    decoded_body = extract_params(r.data)
AttributeError: 'PreparedRequest' object has no attribute 'data'

【问题讨论】:

  • 请显示更多错误信息。
  • 已添加完整的错误信息。

标签: python oauth tumblr python-requests


【解决方案1】:

如果您愿意尝试包装 Requests 的库,可以使用 rauth。我什至可以给你一个有效的 Tumblr 示例:

from rauth import OAuth1Service

import re
import webbrowser

# Get a real consumer key & secret from http://www.tumblr.com/oauth/apps
tumblr = OAuth1Service(
    consumer_key='gKRR414Bc2teq0ukznfGVUmb41EN3o0Nu6jctJ3dYx16jiiCsb',
    consumer_secret='DcKJMlhbCHM8iBDmHudA9uzyJWIFaSTbDFd7rOoDXjSIKgMYcE',
    name='tumblr',
    request_token_url='http://www.tumblr.com/oauth/request_token',
    access_token_url='http://www.tumblr.com/oauth/access_token',
    authorize_url='http://www.tumblr.com/oauth/authorize',
    base_url='https://api.tumblr.com/v2/')

request_token, request_token_secret = tumblr.get_request_token()

authorize_url = tumblr.get_authorize_url(request_token)

print 'Visit this URL in your browser: ' + authorize_url
webbrowser.open(authorize_url)
authed_url = raw_input('Copy URL from your browser\'s address bar: ')
verifier = re.search('\oauth_verifier=([^#]*)', authed_url).group(1)

session = tumblr.get_auth_session(request_token,
                                  request_token_secret,
                                  method='POST',
                                  data={'oauth_verifier': verifier})

user = session.get('user/info').json()['response']['user']

print 'Currently logged in as: {name}'.format(name=user['name'])

Rauth 0.5.3 将适用于 Requests 1.1.0(可能还有 1.0.0)。如果您试一试,如果您有任何其他问题,请告诉我!

完全公开,我保持沉默。

【讨论】:

  • rauth 刚刚救了我——干得好,Max,继续努力——没有其他 Python OAuth 库可供我依靠
【解决方案2】:

我猜您正在使用 Requests 1.0.0 或更高版本。这是一个向后不兼容的版本,发生此错误是因为 requests-oauthlib 尚不兼容。已经做了一些工作来解决这个问题,但还没有一个新版本。请参阅 requests-oauthlib 的 issue #1

现在你的选择是:

  1. 降级到 requests 0.14.2,它应该与 request_oauthlib 0.2.0 一起使用。
  2. 升级到 request_oauthlib 的 the git version,这可能足以满足您的需求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2013-03-07
    • 2015-04-25
    • 2018-12-30
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多