该问题可能是API请求未正确设置造成的。以下是一个设置请求参数的示例代码:
import requests
from requests.auth import AuthBase
class AWSSigV4Auth(AuthBase):
def __init__(self, access_key, secret_key, region, service):
self.access_key = access_key
self.secret_key = secret_key
self.region = region
self.service = service
def __call__(self, r):
# create a new request with the required headers
import datetime, hashlib, hmac
method = r.method
endpoint = r.url
headers = r.headers
if 'date' not in headers:
headers['date'] = datetime.datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')
# Step 1: create canonical request
canonical_uri = '/'
canonical_querystring = ''
canonical_headers = ''
signed_headers = ''
payload_hash = hashlib.sha256(('' if r.body is None else r.body).encode('utf-8')).hexdigest()
canonical_request = '\n'.join([
method.upper(), canonical_uri, canonical_querystring, canonical_headers, signed_headers, payload_hash])
# Step 2: create string to sign
algorithm = 'AWS4-HMAC-SHA256'
credential_scope = '/'.join([
headers['date'][0:8],
self.region,
self.service,
'aws4_request',
])
string_to_sign = '\n'.join([
algorithm,
headers['date'],
credential_scope,
hashlib.sha256(canonical_request.encode('utf-8')).hexdigest(),
])
# Step 3: calculate signature
kDate = hmac.new(('AWS4'+self.secret_key).encode('utf-8'), headers['date'][0:8].encode('utf-8'), hashlib.sha256).digest()
kRegion = hmac.new(kDate, self.region.encode('utf-8'), hashlib.sha256).digest()
kService = hmac.new(kRegion, self.service.encode('utf-8'), hashlib.sha256).digest()
kSigning = hmac.new(kService, b'aws4_request', hashlib.sha256).