cloudflareのキャッシュ削除APIをZend_Http_Client_Adapter_Curlで叩く

PHP

cloudflare便利っすね。
但し、自分で運用する分には良いのですが、画像やCSSがキャッシュされるので、更新する人が別にいると不便です。
てことでAPIを叩いてキャッシュを削除してみます。

curlでのヘルプはあるのですが、APIを叩くツールを作ろうとしたとき、PHPで組みたかったのでZend_Http_Client_Adapter_Curlを使ったソースを作りました。
ちなみにZendFrameworkは1系です。

やることの流れはこちらを参考にしました。
CloudFlare APIを使ってキャッシュを削除する
CloudFlareでAPIを使って個別にファイルキャッシュを削除させる

Zend_Http_Client_Adapter_Curlの使い方がけっこー謎で、ソースを追いながらやっと叩くことができました。
ドキュメントが完全に足りてないですね。。

-Hは$client->setHeaders()
--dataは $client->setRawData( json_encode(array())));
で設定するっぽいです。

zone idを取得

$url = 'https://api.cloudflare.com/client/v4/zones?name=[ドメイン名]&status=active&page=1&per_page=20&order=status&direction=desc&match=all';
$config = array(
    'adapter' => 'Zend_Http_Client_Adapter_Curl',
    'curloptions' => array(
        CURLOPT_HEADER => false, // HTTPヘッダの内容は受け取らない
        CURLOPT_RETURNTRANSFER => true, // 文字列形式で受け取る
    )
);
$client = new Zend_Http_Client($url, $config);
$client->setHeaders(array(
        'X-Auth-Email' => [メールアドレス],
        'X-Auth-Key' => [APIキー],
        'Content-Type' => 'application/json'
        )
);

// レスポンスのオブジェクトを取得
$response = $client->request();

// HTTPステータスコードのチェック
$status_code = $response->getStatus();
if ($status_code != 200) {
    echo $status_code;
}

// レスポンスボディー
print_r(json_decode($response->getBody()));

こんなレスポンスが返ってくるはず

stdClass Object
(
    [result] => Array
        (
            [0] => stdClass Object
                (
                    [id] => [これがZoneIDだよ]
                    [name] => 
                    [status] => active
                    [paused] => 
                    [type] => full
                    [development_mode] => 
                    [name_servers] => Array
                        (
                            [0] => isla.ns.cloudflare.com
                            [1] => sid.ns.cloudflare.com
                        )

                    [original_name_servers] => Array
                        (
                            [0] => 
                            [1] => 
                        )

                    [original_registrar] => 
                    [original_dnshost] => 

ここで返ってくるidがこのあと使うZoneIDです。

キャッシュの削除APIを叩く

$identifier = [ZoneID];

$url = 'https://api.cloudflare.com/client/v4/zones/'.$identifier.'/purge_cache';
$config = array(
    'adapter' => 'Zend_Http_Client_Adapter_Curl',
    'curloptions' => array(
        CURLOPT_HEADER => false, // HTTPヘッダの内容は受け取らない
        CURLOPT_RETURNTRANSFER => true, // 文字列形式で受け取る
    )
);
$client = new Zend_Http_Client($url, $config);
$client->setHeaders(array(
        'X-Auth-Email' => [メールアドレス],
        'X-Auth-Key' => [APIキー],
        'Content-Type' => 'application/json',
        )
);

//全削除の場合
$client->setRawData( json_encode(array('purge_everything'=>true)));

//ファイル指定の場合
//$client->setRawData( json_encode(array('files'=>array('https://[ドメイン名]/[ファイル名]'))));


// レスポンスのオブジェクトを取得
$response = $client->request('DELETE');

// HTTPステータスコードのチェック
$status_code = $response->getStatus();
if ($status_code != 200) {
    echo $status_code;
}

// レスポンスボディー
echo $response->getBody();

成功すればこんなレスポンスが返ってきます。

{"result":{"id":[ZoneID]},"success":true,"errors":[],"messages":[]}

公式ドキュメント

Cloudflare API Documentation
Interact with Cloudflare's products and services via the Cloudflare API

コメント

タイトルとURLをコピーしました