当使用 blob.generate_signed_url()
生成云端URL时,偶尔返回 SignatureDoesNotMatch
错误通常是由于在签名URL过期之前发起了HTTP请求导致的。为了解决这个问题,你可以延长URL的过期时间或者重新生成URL。
以下是一个解决方法的代码示例:
from google.cloud import storage
# 创建Storage客户端
client = storage.Client()
# 获取存储桶和Blob对象
bucket = client.get_bucket('your-bucket-name')
blob = bucket.blob('your-blob-name')
# 生成签名URL,并设置过期时间为7天
url = blob.generate_signed_url(
expiration=datetime.timedelta(days=7),
method='GET'
)
# 发起HTTP请求
response = requests.get(url)
# 如果返回SignatureDoesNotMatch错误,则重新生成URL并重试
if response.status_code == 403 and 'SignatureDoesNotMatch' in response.text:
url = blob.generate_signed_url(
expiration=datetime.timedelta(days=7),
method='GET'
)
response = requests.get(url)
# 处理响应
print(response.text)
在上面的示例中,我们使用 datetime.timedelta(days=7)
设置URL的过期时间为7天。如果在发起HTTP请求时返回了403错误并且错误信息中包含 SignatureDoesNotMatch
,则重新生成URL并重试请求。
你可以根据自己的需求调整过期时间,并可以选择通过循环来多次重试请求,直到成功为止。