我一直在寻找一种在 python 3 中实现 2 legged oauth 的方法,以使用 brightcloud api。他们在此处提供了几个使用 java、php、ruby、.NET C# 的代码示例:https ://bcws.brightcloud.com/code-samples.php 。我尝试按照相同的逻辑将 java 示例转换为 python,但是,我对 python 比较陌生,很快就陷入困境。
我尝试使用 rauth 来实现,但是,基本设置使用了一个 request_token_url,它不是由 brightcloud 提供的。我还尝试使用基于此答案的以下代码实现 - 如何在 python 中使用 2-legged oauth2 发送 POST?
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 行,在 u = urllib.request.urlopen(request.to_url()) 文件“/usr/lib/python3.5/urllib/request.py”中,第 163 行,在 urlopen 返回 opener.open(url, data, timeout) 文件“/usr/lib/python3.5/urllib/request.py”,第 472 行,在打开响应 = meth(req, response) 文件“ /usr/lib/python3.5/urllib/request.py”,第 582 行,在 http_response 'http'、请求、响应、代码、msg、hdrs)文件“/usr/lib/python3.5/urllib/request. py”,第 510 行,错误返回 self._call_chain(*args) 文件“/usr/lib/python3.5/urllib/request.py”,第 444 行,在 _call_chain 结果 = func(*args) 文件“/usr /lib/python3.5/urllib/request.py”,第 590 行,在 >http_error_default 中引发 HTTPError(req.full_url,代码,味精,hdrs,fp)urllib.error.HTTPError:HTTP错误401:未经授权
任何帮助将非常感激。