是否可以使用Rauth或其他python 3库来实现2脚的oauth?

时间:2017-03-24 15:04:38

标签: python python-3.x oauth oauth-1.0a 2-legged

我一直在寻找一种在python 3中实现2腿oauth的方法来与brightcloud api一起工作。他们使用java,php,ruby,.NET C#提供了几个代码示例:https://bcws.brightcloud.com/code-samples.php。我尝试使用相同的逻辑将java示例转换为python,然而,我对python来说相对较新,我很快就崩溃了。

我尝试使用rauth实现,但是,基本设置使用了brightcloud不提供的request_token_url。我也尝试使用基于这个答案的以下代码实现 -  How do I send a POST using 2-legged oauth2 in python?

import oauth2 
import urllib #for url-encode
import urllib.request
import time #Unix timestamp import oauth2

# construct request url
base_url = "http://thor.brightcloud.com/rest"
uri_info_path = "/uris"
url = urllib.parse.quote_plus("http://www.booking.com")

# api key and secret
consumer_key = 'MY_CONSUMER_KEY'
consumer_secret = 'MY_CONSUMER_SECRET'

# contruct endpoint
endpoint = rest_endpoint + uri_info_path + '/' + url

# build request
def build_request(url, method):
    params = {                                            
        'oauth_version': "1.0",
        'oauth_nonce': oauth2.generate_nonce(),
        'oauth_timestamp': int(time.time())
    }
    consumer = oauth2.Consumer(key=consumer_key, secret=consumer_secret)
    params['oauth_consumer_key'] = consumer.key
    req = oauth2.Request(method=method, url=url, parameters=params)
    signature_method = oauth2.SignatureMethod_HMAC_SHA1()
    req.sign_request(signature_method, consumer, None)
    return req

# call
request = build_request(endpoint,'GET')
u = urllib.request.urlopen(request.to_url())
data = u.read()
print (data)

此行存在问题:     u = urllib.request.urlopen(request.to_url())

生成以下追溯:

  

追踪(最近一次通话):    文件“bright.py”,第37行,in      u = urllib.request.urlopen(request.to_url())    文件“/usr/lib/python3.5/urllib/request.py”,第163行,在urlopen中      return opener.open(url,data,timeout)    文件“/usr/lib/python3.5/urllib/request.py”,第472行,打开      response = meth(req,response)    在http_response中输入文件“/usr/lib/python3.5/urllib/request.py”,第582行      'http',请求,响应,代码,消息,hdrs)    文件“/usr/lib/python3.5/urllib/request.py”,第510行,出错      return self._call_chain(* args)    _call_chain中的文件“/usr/lib/python3.5/urllib/request.py”,第444行      result = func(* args)    在> http_error_default中输入文件“/usr/lib/python3.5/urllib/request.py”,第590行      引发HTTPError(req.full_url,code,msg,hdrs,fp)   urllib.error.HTTPError:HTTP错误401:未经授权

非常感谢任何帮助。

0 个答案:

没有答案