2016-02-20 59 views
0

我正在嘗試使用python和oauth 1.0訪問API。我不能得到如何生成oauth_signature。以下是我的代碼到目前爲止,希望有人可以幫忙。爲API訪問生成簽名(Oauth 1.0)

import oauth2 as oauth 
import urllib.parse 
import time 
from random import getrandbits 


api_key = 'xxxxxxxxxxxxxxxxxxx' 
CONSUMER_KEY = 'xxxxxxxxxxxxxxxxx' 
CONSUMER_SECRET = 'xxxxxxxxxxxxxxxxx' 
access_key = 'xxxxxxxxxxxxxxxxx' 
access_secret_key = 'xxxxxxxxxxxxxxxxxxx' 

consumer = oauth.Consumer(CONSUMER_KEY, CONSUMER_SECRET) 
token = oauth.Token(access_key, access_secret_key) 

client = oauth.Client(consumer, token) 

nonce = str(getrandbits(64)) 
print(nonce) 

url = 'https://secure.tmsandbox.co.nz/Oauth/Authorize?oauth_token=' 

params = {'oauth_version': "1.0", 
      'oauth_nonce': oauth.generate_nonce(), 
      'oauth_timestamp': int(time.time()), 
      'oauth_consumer_key': CONSUMER_KEY, 
      'oauth_token': access_key, 
      'oauth_nonce' : nonce, 
      'oauth_consumer_key': consumer.key, 
      'oauth_signature': 'el078a5AXGi43FBDyfg5yWY', 
      } 

req = oauth.Request(method="POST", url='https://secure.tmsandbox.co.nz/Oauth/RequestToken?', parameters=params) 



# Sign the request. 
signature_method = oauth.SignatureMethod_HMAC_SHA1() 
req.sign_request(signature_method, consumer, token) 

如何API的開發人員建議我訪問:

的oauth_signature是有點困難拿出並且是 大多數人的旅行了。要生成一個簽名,您需要以基於 的字符串開頭,該字符串以您正在調用(不含查詢字符串)的HTTP方法和URL編碼地址 開頭。當我們獲得 請求令牌時,這將是對 https://secure.trademe.co.nz/Oauth/RequestToken?scope=MyTradeMeRead,MyTradeMeWrite (請注意,在此示例中,scope參數用於請求 讀取/寫入訪問)的POST請求。這是我們的基本字符串的開始:我們與符號(&)分離這些

POST&https%3A%2F%2Fsecure.trademe.co.nz%2FOauth%2FRequestToken 

通知。按字母順序排除所有 參數鍵(oauth_nonce等)和任何查詢字符串參數 (不包括oauth_signature,因爲這就是我們所生成的 ),並將它們附加在單獨的字符串中,[name] = [value] 將每個一個&符號。 URL將其編碼並將其附加到基數字符串末尾的 ,並以「&」符號開頭。

回答

0

檢查這個answer。它解釋瞭如何使用HMAC-SHA1簽名方法並使用OAuth訪問網站。

+0

在該線程中發現了一個有趣的方法,可能會查看此代替加密:[鏈接](http://stackoverflow.com/a/32060758/5932561) – musss