Skip to content

Instantly share code, notes, and snippets.

@fouad
Created October 12, 2015 06:42
Show Gist options
  • Save fouad/a80f17b34698eebd856c to your computer and use it in GitHub Desktop.
Save fouad/a80f17b34698eebd856c to your computer and use it in GitHub Desktop.
Purge CloudFlare cache on deploy
{
"email": "[email protected]",
"zone": "CLOUDFLARE_ZONE",
"token": "CLOUDFLARE_TOKEN"
}
var gulp = require('gulp')
var request = require('request')
gulp.task('purge-cache', function () {
var cf = require('./cloudflare.json')
request({
url: 'https://api.cloudflare.com/client/v4/zones/' + cf.zone + '/purge_cache',
method: 'DELETE',
headers: {
'X-AUTH-EMAIL': cf.email,
'X-Auth-Key': cf.token,
'Content-Type': 'application/json'
},
body: {
purge_everything: true
},
json: true
}, function (err, response, body) {
if (err) {
throw err
}
console.log('CloudFlare cache purge response')
console.log(body)
})
})
@manur
Copy link

manur commented Jan 2, 2018

@hadifarnoud - here's how. files can be just an array of URLs or it can be objects to purge selectively by origin etc. Both included here.

gulp.task('purge-cache', function () {
  let config = require(path.join(__dirname, 'config.json'));
  let cf = config.cloudflare;

  request({
    url: 'https://api.cloudflare.com/client/v4/zones/' + cf.zone + '/purge_cache',
    method: 'DELETE',
    headers: {
      'X-AUTH-EMAIL': cf.email,
      'X-Auth-Key': cf.token,
      'Content-Type': 'application/json'
    },
    body: {
      purge_everything: false
      files: [
        "http://www.example.com/css/styles.css",
        {
          "url": "http://www.example.com/cat_picture.jpg",
          "headers": {
            "Origin": "cloudflare.com",
            "CF-IPCountry": "US",
            "CF-Device-Type": "desktop"
          }
        }
      ]
    },
    json: true
  }, function (err, response, body) {
    if (err) { console.error("!!! Error purging Cloudflare cache"); return; }

    console.log('Cloudflare cache purge response: ');
    console.log(body);
  });
});

@alvarotrigo
Copy link

Nice, thanks for that! :)
Btw, I had to use the Global API instead of a new Token, didn't work otherwise not sure why.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment