如何使用 Python 的加密包对 AMP 更新缓存请求进行签名?



如何使用Python的加密包为AMP的update-cacheneneneba API签名URL?

这是核心签名逻辑,用于确定更新缓存请求的路径和查询参数。在这里,域是您网站的实际域,而不是特殊的AMP子域。

from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import serialization
def sign_amp_update_cache_url(private_key: bytes, domain: str, url: str) -> str:
private_key = serialization.load_pem_private_key(private_key, password=None)  # or whatever your key's password is
message = f"/update-cache/c/s/{domain}{url}?amp_action=flush&amp_ts={int(time.time())}"
binary_signature = private_key.sign(
message.encode("UTF-8"),
padding.PKCS1v15(),
hashes.SHA256()
)
encoded_signature = base64.b64encode(binary_signature, altchars=b"-_").replace(b"=", b"").decode("UTF-8")
signed_url = f"{message}&amp_url_signature={encoded_signature}"
return signed_url

若要完成请求的准备,您必须计算域的AMP缓存子域,从caches.json获取updateCacheApiDomainSuffix,然后从上面的函数连接AMP缓存子域、updateCacheApiDomainSuffix和签名的AMP更新缓存URL。以下是谷歌关于这个过程的文档,并举例说明缓存URL应该是什么样子。

最新更新