我一直在使用request-oauthlib,它有rsa-sha1签名算法,但似乎无法在授权标头中添加额外的参数,如果我在以前手动修改标头提出要求 "请求包含不完整或无效的oauth_signature。" 因为当我将新的oauth_body_hash添加到授权标头时,它已经创建了oauth_signature。 我已粘贴代码,使用oauth的第一个调用正确传递,但第二个调用是错误的。
任何可行的方法来解决这个问题?另一个库有两个选项来添加额外的参数并提供rsa-sha1签名?
oauth = OAuth1(
consumer_key,
signature_method='RSA-SHA1',
signature_type='auth_header',
rsa_key=key,
callback_uri=callback_uri
)
oauth.client.realm = 'eWallet'
r = requests.post(url=request_token_url, auth=oauth)
credentials = parse_qs(r.content)
# end of request
# post shopingcart
root = ET.fromstring(shopping_cart_xml)
root.find('OAuthToken').text = credentials['oauth_token'][0]
xml = ET.tostring(root, encoding="us-ascii", method="xml")
sha1 = hashlib.sha1()
sha1.update(xml)
oauth_body_hash = sha1.digest()
oauth_body_hash = base64.b64encode(oauth_body_hash)
oauth.client.oauth_body_hash = oauth_body_hash
req = Request('POST', shopping_cart_url, data=xml, auth=oauth)
prepped = req.prepare()
auth_header = prepped.headers['Authorization'] + ', oauth_body_hash="%s"' % (oauth_body_hash)
headers = {'Content-Type': 'application/xml', 'Authorization': auth_header}
r = requests.post(url=shopping_cart_url, headers=headers, data=xml)