[教程]如何使用腾讯CDN API刷新url?


月宅说

在使用了腾讯CDN缓存“html”页面后,会出现一个问题,那就是当你评论后,刷新页面,评论就 会消失,必须去CDN控制台手动刷新url,再回来刷新这个页面,才会出现评论。但这个过程非常麻烦,为了解决这个问题,当你提交评论后,立刻进行实时刷新,确保第一时间显示回复评论。接下来是月宅带来的教程。


举个栗子

已知“6159.html”被缓存到了CDN上面,当提交后可以看见评论,但刷新后评论消失,原因是CDN上面缓存了之前的页面,并不会立马显示现在的,有可能已经缓存了1天以上。作为强迫症这点不能忍,必须解决这个问题,那么我们来编写一下实现过程。


教程一

到这个地址获取你的SecretKey及其SecretId:https://console.cloud.tencent.com/capi先不要关闭这个页面,或者保存下这两行。

教程

新建一个php文件,名为shuaxin-cdn-url.php (刷新-CDN-url 随你叫啥..)然后往里面写入这些东西。月宅已经为你写好了。

<?php
$secretKey='复制你的KEY';
$secretId='复制进来你的ID';
/*请勿修改↓*/
$action='RefreshCdnUrl';
$PRIVATE_PARAMS = array(
                'urls.0'=> '这里是需要刷新的地址',
                );
//请求官方API地址
$HttpUrl="cdn.api.qcloud.com";
// 使用POST,无需其他的别改
$HttpMethod="POST";
$isHttps =true;
$COMMON_PARAMS = array(
                'Nonce' => rand(),
                'Timestamp' =>time(NULL),
                'Action' =>$action,
                'SecretId' => $secretId,
                );

CreateRequest($HttpUrl,$HttpMethod,$COMMON_PARAMS,$secretKey, $PRIVATE_PARAMS, $isHttps);

function CreateRequest($HttpUrl,$HttpMethod,$COMMON_PARAMS,$secretKey, $PRIVATE_PARAMS, $isHttps)
{
        $FullHttpUrl = $HttpUrl."/v2/index.php";
        $ReqParaArray = array_merge($COMMON_PARAMS, $PRIVATE_PARAMS);
        ksort($ReqParaArray);
        $SigTxt = $HttpMethod.$FullHttpUrl."?";

        $isFirst = true;
        foreach ($ReqParaArray as $key => $value)
        {
                if (!$isFirst) 
                {
                        $SigTxt = $SigTxt."&";
                }
                $isFirst= false;
                if(strpos($key, '_'))
                {
                        $key = str_replace('_', '.', $key);
                }

                $SigTxt=$SigTxt.$key."=".$value;
        }
        $Signature = base64_encode(hash_hmac('sha1', $SigTxt, $secretKey, true));
        $Req = "Signature=".urlencode($Signature);
        foreach ($ReqParaArray as $key => $value)
        {
                $Req=$Req."&".$key."=".urlencode($value);
        }
        if($HttpMethod === 'GET')
        {
                if($isHttps === true)
                {
                        $Req="https://".$FullHttpUrl."?".$Req;
                }
                else
                {
                        $Req="http://".$FullHttpUrl."?".$Req;
                }

                $Rsp = file_get_contents($Req);

        }
        else
        {
                if($isHttps === true)
                {
                        $Rsp= SendPost("https://".$FullHttpUrl,$Req,$isHttps);
                }
                else
                {
                        $Rsp= SendPost("http://".$FullHttpUrl,$Req,$isHttps);
                }
        }

        var_export(json_decode($Rsp,true));
}

function SendPost($FullHttpUrl, $Req, $isHttps)
{

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $Req);

        curl_setopt($ch, CURLOPT_URL, $FullHttpUrl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        if ($isHttps === true) {
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,  false);
                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  false);
        }

        $result = curl_exec($ch);

        return $result;
}
// 返回完成
// BY:月宅酱 ikmoe.com

结果

到这里就完了,使用WordPress的内置函数the_permalink()来传递当前url的地址,也可以使用一个输入框来直接输入地址点击刷新,这样就不用去腾讯控制台了。

给TA打赏
共{{data.count}}人
人已打赏
网络干货

[教程]P站翻车啦,怎么上P站呀,好难受啊!(怎么上P站?P站上不去 2017-18教程)

2017-12-1 15:44:03

网络干货

[教程]WordPress Warning: file_exists(): open_basedir咋解决

2017-12-6 23:29:43

18 条回复 A文章作者 M管理员
  1. 月宅

    签到成功!签到时间:下午7:46:54每日打卡,月宅祝你生活越过越好喔~

  2. 大佬好

  3. 签到成功!签到时间:下午8:46:58每日打卡,月宅祝你生活越过越好喔~

  4. 签到成功!签到时间:下午8:47:20每日打卡,月宅祝你生活越过越好喔~

  5. 悄悄说一句,把张戈大佬的代码换掉钩子小改一下其实就可以

    • 然后突然发现张戈大佬写好了

    • 其实直接复制腾讯官方文档的

    • 月宅

      文档啊,晕,你水文坑小白啊

    • 去去去,这可是自个实践修改的

    • 你可以直接复制这篇的php来一发,是能够刷新的

    • 月宅

      又不是自动的,你需要滑稽的WordPress钩子

    • 将这个放文章模板下,使用post的方式 另外用wp输出当前url地址

    • 月宅

      为啥不用保存文章和发表及批准编辑评论的钩子呢233

    • 卧槽我都不知道有这个玩意,涨知识

    • 月宅

      大佬别谦虚

    • 我真不知道,这还是你告诉我的

    • 我发现你是个低调的大佬啊

    • 月宅

      不不不,我是萌新真萌新