在Django中使用python的oauth2库访问dropbox

在Django中使用python的oauth2库访问dropbox,django,oauth,dropbox-api,Django,Oauth,Dropbox Api,我正在尝试使用oauth2库访问dropbox帐户信息。 我已从dropbox获得访问令牌。那么我现在做的是: parameters = { 'oauth_consumer_key' : DropboxConstants.app_key, #my app key 'oauth_token' : access_token_g,#token that i got [<key>,<secret>] 'oauth_signatur

我正在尝试使用oauth2库访问dropbox帐户信息。 我已从dropbox获得访问令牌。那么我现在做的是:

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)
参数={
“oauth_消费者_密钥”:DropboxConstants.app_密钥,#我的应用密钥
“oauth_token”:访问_token_g,#我得到的令牌[,]
“oauth\u签名方法”:oauth.SignatureMethod\u HMAC\u SHA1.name,
'oauth_timestamp':oauth.generate_timestamp(),
“oauth\u nonce”:oauth.generate\u nonce(),
“oauth_版本”:DropboxConstants.api_版本,
“oauth_签名”:”
}
#准备签名
oauth\u request=oauth.request(method=“GET”,url=DropboxConstants.account\u info\u url,parameters=parameters)
signature\u method\u m=oauth.SignatureMethod\u HMAC\u SHA1()
签名=签名\方法\签名\基础(消费者=消费者,请求=oauth\请求,令牌=访问\令牌)
参数['oauth_签名']=签名[1]
#准备用于访问帐户信息的url
url=“%s?oauth\u令牌=%s&oauth\u使用者\u密钥=%s&oauth\u签名\u方法=%s&oauth\u时间戳=%s&oauth\u当前=%s&oauth\u版本=%s&oauth\u签名=%s”%\
(DropboxConstants.account_info_url、access_令牌['oauth_令牌]、参数['oauth_消费者密钥]、参数['oauth_签名_方法]、参数['oauth_时间戳]、参数['oauth_nonce']、参数['oauth_版本]、参数['oauth_签名])
返回HttpResponseRedirect(url)
现在生成的签名是: 获取和https%3A%2F%2Fapi.dropbox.com%2F0%2fcount%2fino&oauth_消费者密钥%3Dedw6k7d78hu8q8v%26oauth_当前值%3D39519001%26oauth_签名_方法%3DHMAC-SHA1%26oauth_时间戳%3D1314679561%26oauth_令牌%3oauth令牌%3oauth密钥%253Dun58fgoc14n9jlv%2526oauth令牌%253d2dafr40uwu版本%3d2daf01.0

我得到的错误是:

{“错误”:"签名无效。预期的签名基本字符串:GET&https%3A%2F%2Fapi.dropbox.com%2F0%2Faccount%2Finfo&https%253A%252Fapi.dropbox.com%252F0%252Faccount%252Finfo%3D%26oauth_用户密钥%3Dedw6k7d78hu8q8v%26oauth用户密钥%253Dedw6k7d78hu8q8v%2526oauth非密钥%253D39519001%253DHMAC-SHA1%252oauth签名方法%2526oauth时间戳D1314679561%2526oauth_令牌%253Doauth_令牌\u秘密%25253Dun58fgoc14n9jlv%252526oauth_令牌%25253D2ew2dafg0r40uwq%2526oauth_版本%253D1.0%3D%26oauth nonce%3D39519001%26oauth_签名方法%3DHMAC-SHA1%26oauth时间戳%3D1314679561%26oauth_令牌%3D2EW2DAFR40UWQ%26oauth_版本%3D1.0”}


首先,请使用urlencode正确转义字符:

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

看看这是否有帮助,如果没有,我将查看符号库

事实上,我已经通过代码中的一些更改解决了这个问题,如下所示:

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())
它给了我正确的内容。

{“错误”:“无效签名。预期的签名基本字符串:GET&https%3A%2F%2Fapi.dropbox.com%2F0%2fcount%2fino&oauth_消费者密钥%3Dedw6k7d78hu8q8v%26oauth_nonce%3D85657197%26oauth_签名方法%3DHMAC-SHA1%26oauth_时间戳%3D1314726395%26oauth_令牌%3dokd2gvoiva9;%26oauth_版本%3D1.0”生成的签名获取%26https%253A%252F%252Fapi.dropbox.com%252F0%252Faccount%252Finfo%26oauth_消费者密钥%253Dedw6k7d78hu8q8v%2526oauth_当前值%253D85657197%2526oauth_签名方法%253DHMAC-SHA1%2526oauth_时间戳%253D1314726395%2526oauth_令牌%253Dokd2gvlvoiva9ro%2526oauth_版本%253D1.0