0
使用的Dropbox API的我使用的oauth2包dropbox來Django的使用Dropbox的作爲推動文件: 檢索帳戶信息這個簽名方法的工作原理:推文件通過Django的
parameters = {
'oauth_consumer_key' : DropboxConstants.app_key,
'oauth_token' : dropbox.oauth_token,
'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' : ''
}
access_token_g = oauth.Token(key=dropbox.oauth_token,secret=dropbox.oauth_token_secret)
#prepare signature
oauth_request = oauth.Request(method="GET",url=DropboxConstants.account_info_url,parameters=parameters)
signature_method_m = oauth.SignatureMethod_HMAC_SHA1()
oauth_request.sign_request(signature_method=signature_method_m,
consumer=DropboxConstants.consumer,
token=access_token_g)
resp, content = DropboxConstants.client.request(oauth_request.to_url())
if resp['status'] != '200':
print content
raise Exception("Invalid response from Dropbox.")
account_info = simplejson.loads(content)
但對於推Dropbox的文件我使用:
parameters = {
'oauth_consumer_key' : DropboxConstants.app_key,
'oauth_token' : dropbox.oauth_token,
'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' : '',
'file' : request.FILES['file'].name,
}
access_token_g = oauth.Token(key=dropbox.oauth_token,secret=dropbox.oauth_token_secret)
#prepare signature
oauth_request = oauth.Request(method="POST",
url=DropboxConstants.file_access_url,
parameters=parameters)
signature_method_m = oauth.SignatureMethod_HMAC_SHA1()
oauth_request.sign_request(signature_method=signature_method_m,
consumer=DropboxConstants.consumer,
token=access_token_g)
resp, content = DropboxConstants.client.request(oauth_request.to_url())
if resp['status'] != '200':
print content
raise Exception("Invalid response from Dropbox.")
它給了我這個錯誤
{"error": "Invalid signature. Expected signature base string: GET&https%3A%2F%2Fapi-content.dropbox.com%2F0%2Ffiles%2Fdropbox%2F&oauth_body_hash%3D2jmj7l5rSw0yVb%252FvlWAYkK%252FYBwk%253D%26oauth_consumer_key%3Dedw6k7d78hu8q8v%26oauth_nonce%3D69188147%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1314863397%26oauth_token%3Dv0b6uxv18z2wrmg%26oauth_version%3D1.0"}
signature that is generated is:
AUHJv%2F%2BCeRP27PsJ1X5eMaSghGU%3D
我遇到過一篇文章:https://github.com/ourbricks/ourbricks-api-examples/blob/master/python/upload2ourbricks.py#L126-173但沒有得到什麼已經完成。
我去我的應用程序與不同的Oauth提供商聯繫起來......於是就想抽象通用代碼到一個單一的Django應用程序......這就是爲什麼我使用的oauth2應用Django的,而不是使用個人客戶將成爲有點兒在維修中感到困惑。我是否有道理,或者你覺得我應該以其他方式? – amd