php - 使用/update-cache 请求更新 AMP 页面

标签 php amp-html

尝试使用/update-cache/请求更新一些 AMP 页面,但出现 403 错误。

从 url 中删除了开头部分/协议(protocol),因为我没有发布这么多链接的声誉,但一切都是 https。

我有一个页面:www.qponverzum.hu/ajanlat/budapest-elozd-meg-a-hajhullast-mikrokameras-hajdiagnosztika-hajhagyma-es-fejborvizsgalattal-tanacsadas-5000-ft-helyett-2500-ft-ert -biohajklinika-szepsegapolas-egeszseg/amp

来自 AMP 缓存:www-qponverzum-hu.cdn.ampproject.org/c/s/www.qponverzum.hu/ajanlat/budapest-elozd-meg-a-hajhullast-mikrokameras-hajdiagnosztika-hajhagyma-es- fejborvizsgalattal-tanacsadas-5000-ft-helyett-2500-ft-ert-biohajklinika-szepsegapolas-egeszseg/amp

我一直在关注 developers.google.com/amp/cache/update-ping 上的文档

如果我发出/update-ping 请求,它似乎工作正常,返回 200 无内容响应,但由于大量 urls/pages 我们想使用/update-cache 因为它允许更高的请求率。

我已经创建了一个私有(private)和公共(public) RSA key ,并在 www.qponverzum.hu/.well-known/amphtml/apikey.pub 上提供了公共(public) key

我一直在尝试使用以下 php 代码生成更新缓存 url

$ampBaseUrl = "https://www-qponverzum-hu.cdn.ampproject.org";
$signatureUrl = '/update-cache/c/s/www.qponverzum.hu/ajanlat/budapest-elozd-meg-a-hajhullast-mikrokameras-hajdiagnosztika-hajhagyma-es-fejborvizsgalattal-tanacsadas-5000-ft-helyett-2500-ft-ert-biohajklinika-szepsegapolas-egeszseg/amp?amp_action=flush&_ts='.time();

// opening the private key
$pkeyid = openssl_pkey_get_private("file://private-key.pem");

// generating the signature
openssl_sign($signatureUrl, $signature, $pkeyid)

// urlsafe base64 encoding
$signature = urlsafe_b64encode($signature);

// final url for updating
$ampUrl = $ampBaseUrl.$signatureUrl."&amp_url_signature=".$signature;

我正在使用的 urlsafe_b64encode 函数:

function urlsafe_b64encode($string) {
    return str_replace(array('+','/','='),array('-','_',''), base64_encode($string));
}

$ampUrl 最终看起来像这样:https://www-qponverzum-hu.cdn.ampproject.org/update-cache/c/s/www.qponverzum.hu/ajanlat/budapest-elozd-meg-a-hajhullast-mikrokameras-hajdiagnosztika-hajhagyma-es-fejborvizsgalattal-tanacsadas-5000-ft-helyett-2500-ft-ert-biohajklinika-szepsegapolas-egeszseg/amp?amp_action=flush&amp_ts=1500362660&amp_url_signature=NjTCnmqUGpMY_CokGxchoczSOxnTLQvcQsX4fv2gIhW3H8hVw24mKCpmNoyV-9LND3OAR9ld80KeMH3lip863p_wBorIy1BAag7bRfvWcxsPrbqbox87VMrUWCEsry5epWxKYl2qNCT1GMv8SYAJ5WR0QZR0Qjvw5MXfZjohmbvrxJ7mWlc7fcvWoIXuO_q_yFkhi7A-fOZWm9sy8UDIlq-zNEPkVUwfqfWc_HbNHgvrk9Z6zZSNzB-dWAOT6QYAc1KeEVOIbvQxKkLkGMArTpydj5iLxz0aERvglKRl215Bqh6_jZu95T5yKv7X4R127ylpWYW2YDlTR9bgRE7Faw

如果我向这个 url 发出一个简单的 GET 请求(使用浏览器或 curl),我会收到 403 错误(“您的客户端没有获取 URL 的权限”)。

我检查了网络服务器日志,但似乎没有对公钥 url 发出任何请求。

我想我遗漏了一些非常明显的东西,因此非常感谢任何反馈。

最佳答案

$signatureUrl 中有错误- 在查询参数和 openssl_sign 中应该是 amp_ts 而不是 _ts添加第四个参数 openssl_sign($signatureUrl, $signature, $pkeyid, OPENSSL_ALGO_SHA256);

签名需要使用 SHA256 签名,如果省略最后一个参数,它将使用 SHA1

我已经在我的工作项目中使用了您的脚本并进行了这 2 处更改,并且运行良好。

如果没问题,应该在响应体中返回“OK”。

检查这个https://gist.github.com/krzysztofbukowski/739ccf4061d69360b5b2c8306f5878bd

关于php - 使用/update-cache 请求更新 AMP 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45160480/

相关文章:

php - 如何使用具有定义为第三个非可选参数的函数

php - 在 PHP 中使用正则表达式作为请求处理程序是否不好?

php 谜语 - 有趣的结果

amp-html - Accelerated Mobile Page - 动态页面

amp-html - 实验 'amp-script' 抛出错误 : Experiment "amp-script" not enabled.“

php - 使用 jQuery (Ajax) 和 PHP 仅从 MySQL 获取最新消息? (实时聊天应用程序)

php - 通过Android App注册时Mysql查询出错

node.js - 由于可能与 Node 冲突,node-pre-gyp 安装错误

youtube - AMP HTML中的YouTube播放列表

model-view-controller - 使用 AMP HTML,将链接规范 href 属性设置为井号 (#) 是否合法?