none
如何使用PHP去调用API去管理Azure CDN RRS feed

  • 问题

  • 各位大神,直入正题,最近协助客户部署CDN,客户提出了一个问题,需要定期清除Azure  CDN node上面的内容,不希望通过portal 去清除,希望通过代码实现,客户使用的开发语言是PHP,在查看https://docs.microsoft.com/zh-cn/rest/api/cdn/endpoints/purgecontent#code-try-0 文档后,无法编写整个过程,由于我也不熟悉PHP,但只知道这个过程需要3个部分

    1,auth_azur

    2,call purge content 的api

    3,要清除的路径

    但这3个过程的php 代码应该如何编写,请各位大神指点指点

    2019年4月9日 3:15

答案

  • Hi Tank Tou,

    如果您需要获取 access_token 来调用 api,请参考博客 Get Access Token ,文章中有详细步骤介绍,请根据您的需求,选择合适的方式获取 token。

    如果还有相关问题欢迎发帖询问,如果该回复解决了您的问题,请及时点击“标记为答案”选项。

    • 已标记为答案 Tank Tou 2019年5月12日 10:33
    2019年4月15日 7:38

全部回复

  • Hi Tank Tou,

    我建议您根据以下代码尝试使用 PHP 调用 API 管理 Azure CDN。通过 PHP 调用 Rest API:

    function CallAPI($method, $url, $data = false)
    {
        $curl = curl_init();
    
        switch ($method)
        {
            case "POST":
                curl_setopt($curl, CURLOPT_POST, 1);
    
                if ($data)
                    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
                break;
            case "PUT":
                curl_setopt($curl, CURLOPT_PUT, 1);
                break;
            default:
                if ($data)
                    $url = sprintf("%s?%s", $url, http_build_query($data));
        }
    
        // Optional Authentication:
        curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_setopt($curl, CURLOPT_USERPWD, "username:password");
    
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    
        $result = curl_exec($curl);
    
        curl_close($curl);
    
        return $result;
    }

    URL 列表参考:Endpoints (Azure CDN),您可根据需求点击不同的 API Endpoints 进行参考。

    如有疑问,欢迎发帖咨询。

    2019年4月9日 6:17
  • 感谢,因为我不太懂PHP,所以这里提几个问题

    我去call CDN API的 那个URL,就是含有subscriptionid、profile name、 endpoint name的这个,在哪里写入,

    另外就是如果我不是对所有的内容进行清除,只是对某部分的内容进行清除,那这些内容应该加在哪个位置,

    谢谢你啊

    2019年4月10日 5:48
  • Hi Tank Tou,

    将含有您的 subscriptionid、profile name、 endpoint name 的 url 在函数上方声明即可。

    如果您要删除的仅是节点中的一部分内容,可以尝试将要删除的内容的名以路径形式添加在节点名后方。

    2019年4月10日 6:36
  • 我试试改改,您帮忙看看是否正确
    function CallAPI($method, $url, $data = false)
    {
        $curl = curl_init();
        switch ($method)
        {
            case "POST":
                curl_setopt($curl, CURLOPT_POST, 1);
                if ($data)
                    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
                break;
            case "PUT":
                curl_setopt($curl, CURLOPT_PUT, 1);
                break;
            default:
                if ($data)
                    $url = sprintf("POST https://management.azure.com/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/resourceGroups/%7BresourceGroupName%7D/providers/Microsoft.Cdn/profiles/%7BprofileName%7D/endpoints/%7BendpointName%7D/purge?api-version=2017-10-12s", $url, http_build_query($data));
        }
        // Optional Authentication:
        curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_setopt($curl, CURLOPT_USERPWD, "xxx@xxx.com:*********");
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $result = curl_exec($curl);
        curl_close($curl);
        return $result;
    }
    但不清楚哪里添加清除路径的形式


    2019年4月10日 7:30
  • 将 $method $url 在 function 上方声明具体的值,这样即可成为示例函数的参数。$method 由您需求的 API 类型决定。

    您可以尝试将目标 节点/文件名 添加在 url 的 'Microsoft.Cdn/' 后方进行删除操作。

     

    2019年4月10日 7:51
  • 好 ,感谢,这里我遇到了第二个问题,https://docs.microsoft.com/zh-cn/rest/api/cdn/endpoints/purgecontent#azure_auth 这个文档里面写,是需要去拿token 才能去使用这个API,但拿token 的这个好像也没有什么示例代码,您这边也清除这个吗?
    2019年4月15日 6:54
  • Hi Tank Tou,

    如果您需要获取 access_token 来调用 api,请参考博客 Get Access Token ,文章中有详细步骤介绍,请根据您的需求,选择合适的方式获取 token。

    如果还有相关问题欢迎发帖询问,如果该回复解决了您的问题,请及时点击“标记为答案”选项。

    • 已标记为答案 Tank Tou 2019年5月12日 10:33
    2019年4月15日 7:38