在我之前遇到的关于将 NetSuite API 的 SHA1 升级到 SHA256 的问题之后,我需要采取的步骤之一似乎是添加以下类:
SignatureMethod_HMAC_SHA256
以及更新 hmac.new 函数包含 sha256。
hashed = hmac.new(key, raw, sha256)
然而,我要问的是在哪里访问所述Python的库,以及打开哪些文件来向它们添加新的类和函数。
1.- 安装库 oauth2
pip 安装 oauth2
2.- 在 Windows 上转到该模块的
__init__.py
:
C:\Users\ASUS\AppData\Local\Programs\Python\Python39\Lib\site-packages\oauth2\__init__.py
3.- 看这一行:
from hashlib import sha1
替换为:
from hashlib import sha1,sha256
4.- 看这一行:
def generate_nonce(length=8):
在此功能下方添加一个新功能:
def generate_nonce(length=11):
"""Generate pseudorandom number."""
return ''.join([str(random.SystemRandom().randint(0, 9)) for i in range(length)])
5.- 在文件末尾也添加此类:
class SignatureMethod_HMAC_SHA256(SignatureMethod):
name = 'HMAC-SHA256'
def signing_base(self, request, consumer, token):
if (not hasattr(request, 'normalized_url') or request.normalized_url is None):
raise ValueError("Base URL for request is not set.")
sig = (
escape(request.method),
escape(request.normalized_url),
escape(request.get_normalized_parameters()),
)
key = '%s&' % escape(consumer.secret)
if token:
key += escape(token.secret)
raw = '&'.join(sig)
return key.encode('ascii'), raw.encode('ascii')
def sign(self, request, consumer, token):
"""Builds the base signature string."""
key, raw = self.signing_base(request, consumer, token)
hashed = hmac.new(key, raw, sha256)
# Calculate the digest base 64.
return binascii.b2a_base64(hashed.digest())[:-1]