2011-08-30 24 views
0

我試圖使用oauth2庫訪問下拉框帳戶信息。 我已經從Dropbox獲得了訪問令牌。然後,我在做什麼是:在Django中使用oauth2 python庫訪問下拉框

parameters = { 
    'oauth_consumer_key' : DropboxConstants.app_key, #my app key 
    'oauth_token'   : access_token_g,#token that i got [<key>,<secret>] 
    'oauth_signature_method': oauth.SignatureMethod_HMAC_SHA1.name, 
    'oauth_timestamp'  : oauth.generate_timestamp(), 
    'oauth_nonce'   : oauth.generate_nonce(), 
    'oauth_version'   : DropboxConstants.api_version, 
    'oauth_signature'  : '' 
} 

#prepare signature 
oauth_request=   oauth.Request(method="GET",url=DropboxConstants.account_info_url,parameters=parameters) 
signature_method_m = oauth.SignatureMethod_HMAC_SHA1() 
signature   = signature_method_m.signing_base(consumer=consumer,request=oauth_request,token=access_token_g) 

parameters['oauth_signature'] = signature[1] 

#prepare url for accessing account info 
url = "%s?oauth_token=%s&oauth_consumer_key=%s&oauth_signature_method=%s&oauth_timestamp=%s&oauth_nonce=%s&oauth_version=%s&oauth_signature=%s"%\ 
     (DropboxConstants.account_info_url,access_token['oauth_token'],parameters['oauth_consumer_key'],parameters['oauth_signature_method'],parameters['oauth_timestamp'],parameters['oauth_nonce'],parameters['oauth_version'], parameters['oauth_signature']) 

return HttpResponseRedirect(url) 
現在

是如何產生的簽名: GET &的https%3A%2F%2Fapi.dropbox.com%2f0的%2Faccount%2Finfo & oauth_consumer_key%3Dedw6k7d78hu8q8v%26oauth_nonce%3D39519001 %26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1314679561%26oauth_token%3Doauth_token_secret%253Dun58fgoc14n9jlv%2526oauth_token%253D2ew2dafg0r40uwq%26oauth_version%3D1.0

錯誤我得到的是: { 「錯誤」:「無效的簽名預期的簽名基本字符串: GET & https%3A%2F%2Fapi.dropbox.com%2F0%2Faccount%2Finf ø& HTTPS%253A%252F%252Fapi.dropbox.com%252F0%252Faccount%252Finfo%3D%26oauth_consumer_key%3Dedw6k7d78hu8q8v%26oauth_consumer_key%253Dedw6k7d78hu8q8v%2526oauth_nonce%253D39519001%2526oauth_signature_method%253DHMAC-SHA1%2526oauth_timestamp%253D1314679561%2526oauth_token%253Doauth_token_secret%25253Dun58fgoc14n9jlv% 252526oauth_token%25253D2ew2dafg0r40uwq%2526oauth_version%253D1.0%3D%26oauth_nonce%3D39519001%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1314679561%26oauth_token%3D2ew2dafg0r40uwq%26oauth_version%3D1.0" }

回答

0

首先請使用進行urlencode正確逃脫字符:

from urllib import urlencode 
... 
parameters['oauth_token'] = access_token_g['oauth_token'] 
url = "?".join(DropboxConstants.account_info_url, urlencode(parameters)) 

看看這是否有幫助,如果沒有,我會看看s igniature基地

+0

{「錯誤」:「無效的簽名。預期簽名基準字符串:GET&https%3A%2F%2Fapi.dropbox.com%2F0%2Faccount%2Finfo&oauth_consumer_key%3Dedw6k7d78hu8q8v%26oauth_nonce%3D85657197%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1314726395%26oauth_token%3Dokd2gvlvoiva9ro%26oauth_version%3D1.0「} 簽名生成 GET%26https%253A%252F%252Fapi.dropbox.com%252F0%252Faccount%252Finfo%26oauth_consumer_key%253Dedw6k7d78hu8q8v%2526oauth_nonce%253D85657197%2526oauth_signature_method%253DHMAC-SHA1%2526oauth_timestamp%253D1314726395%2526oauth_token%253Dokd2gvlvoiva9ro%2526oauth_version%253D1 0.0 – amd

0

其實我已經在代碼中解決了這個問題有點變化:

access_token_g = 
oauth.Token(key=access_token['oauth_token'],secret=access_token['oauth_token_secret']) 
#prepare signature 
oauth_request  = oauth.Request(method="GET",url=account_info_url,parameters=parameters) 
signature_method_m = oauth.SignatureMethod_HMAC_SHA1() 

oauth_request.sign_request(signature_method=signature_method_m,consumer=consumer,token=access_token_g) 

resp, content = client.request(oauth_request.to_url()) 

它給了我正確的內容..