4

これは私の 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'
4

2 に答える 2

2

Requests1.0.0以降を使用していると思います。これは下位互換性のないリリースであり、 requests-oauthlibがまだ互換性がないためにこのエラーが発生します。これを修正するためにいくつかの作業が行われましたが、まだ新しいリリースはありません。リクエストの問題#1 -oauthlibを参照してください。

現在、オプションは次のとおりです。

  1. request_oauthlib0.2.0で機能するリクエスト0.14.2にダウングレードします。
  2. request_oauthlibのgitバージョンにアップグレードします。これは、ニーズに十分に対応している可能性があります。
于 2012-12-26T16:01:44.040 に答える
1

リクエストをラップするライブラリを試してみたい場合は、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 を維持します。

于 2013-03-29T03:32:08.070 に答える