ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-11 06:31:31  阅读:171  来源: 互联网

标签:amp-html php


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

因为我没有发布这么多链接的声誉,所以从URL中删除了开头部分/协议,但是一切都是https.

我在以下页面上有以下页面:www.qponverzum.hu/ajanlat/budapest-elozd-meg-a-hajhullast-mikrokameras-hajdiagnosztika-hajhagyma-es-fejborvizsgalattal-tanacsadas-5000-ft-helyett-2500-ft-ert-ika-biohajklin塞斯波加波拉什-埃格塞格

从AMP缓存中:www-qponverzum-hu.cdn.ampproject.org/c/s/www.qponverzum.hu/ajanlat/budapest-elozd-meg-a-hajhullast-mikrokameras-hajdiagnosztika-hajhagyma-es-fejborvizsgalattal-tana -5000英尺helyett-2500英尺ert-biohajklinika-szepsegapolas-egeszseg / amp

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

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

我创建了一个私有和公共RSA密钥,并通过以下网址使该公共密钥成为必需的:www.qponverzum.hu/.well-known/amphtml/apikey.pub

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

$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

如果我对这个网址(使用浏览器或curl)进行简单的GET请求,则会收到403错误(“您的客户无权获取网址”).

我已经检查了网络服务器日志,但似乎没有对公钥URL进行任何请求.

我想我遗漏了一些非常明显的东西,因此,我们将不胜感激.

解决方法:

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

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

在我的工作项目中,我已经将您的脚本与这两个更改一起使用,并且工作正常.

如果可以的话,它应该在响应正文中返回“ OK”.

勾选这个https://gist.github.com/krzysztofbukowski/739ccf4061d69360b5b2c8306f5878bd

标签:amp-html,php
来源: https://codeday.me/bug/20191111/2017863.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有