Skip to content

Instantly share code, notes, and snippets.

@iPotaje
Forked from bshamric/cache.js
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iPotaje/8f0f965e3ff18e23694d to your computer and use it in GitHub Desktop.
Save iPotaje/8f0f965e3ff18e23694d to your computer and use it in GitHub Desktop.
var fs = require('fs');
//this is the path that QTNetwork classes uses for caching files for it's http client
//the path should be the one that has 16 folders labeled 0,1,2,3,...,F
exports.cachePath = '/path/to/phantomjs/cache/data/folder';
//this is the extension used for files in the cache path
exports.cacheExtension = "d";
//the resources that are to be saved
exports.cachedResources = new Array();
//call this when you first encounter a resource
//includeResource takes the httpResponse from phanomjs and remembers it for later
exports.includeResource = function (httpResponse) {
if(!(httpResponse.url in exports.cachedResources)){
exports.cachedResources[httpResponse.url] = new cachedResource(httpResponse);
}
}
//this takes an httpResponse and builds the object that will be used to get the file contents
function cachedResource (httpResponse) {
this.response = httpResponse;
this.cacheFile = getUrlCacheFilename(this.response.url);
this.cacheFileNoPath = this.cacheFile.clearBefore("/");
this.mimetype = this.response.contentType.clearAfter(";");
this.getContents = function () {
//get all of the contents
var contents = fs.read(exports.cachePath+this.cacheFile,'b');
//get the last header
var lastHeader = this.response.headers[this.response.headers.length-1];
var secondToLastHeader = this.response.headers[this.response.headers.length-2];
var indexOfLastHeader = contents.regexIndexOf(secondToLastHeader.name.escapeRegExp()+".+"+lastHeader.name.escapeRegExp());
//really good chance this will be a problem with non image content types
//I used a hex viewer to open up the QT cache files then came up with this way to find the end of the headers
var lengthOfLastHeaders =
secondToLastHeader.name.length+4+secondToLastHeader.value.length+4+
lastHeader.name.length+4+lastHeader.value.length+1;
return contents.substr(indexOfLastHeader+lengthOfLastHeaders);
}
}
//get the name of the file from the QNetworkDiskCache that phantomjs uses
function getUrlCacheFilename(url,littleEndian,cacheSuffix)
{
//im lazy, so make the last two args optional
littleEndian = typeof littleEndian !== 'undefined' ? littleEndian : true;
cacheSuffix = typeof cacheSuffix !== 'undefined' ? cacheSuffix : '.d';
//convert the sha1 digest to hex
//QT handles caching by converting the SHA1 hash to 64 bit qlonglong
// so the hash gets truncated to 8 bytes
var digest = SHA1(url).substring(0,16).toString();
//if this is a little endian system, reverse the bytes
var littleEndian = true;
if(littleEndian)
{
var result = "";
//the digest is in hex, so take 2 bytes at a time
for (var i = digest.length-1; i > 0; i-=2)
{
result += digest.substr(i-1, 2);
}
digest = result;
}
//convert to js int then to base 36 string, then truncate
var hash = parseInt(digest,16).toString(36).substr(0, 8);
//in QT the filename of a cached url is hash[0]%16 + '/' + hash + '.d'
return (parseInt(hash.charCodeAt(hash.length-1))%16).toString(16) + '/' + hash + cacheSuffix;
}
//get hex SHA1 digest of msg
//borrowed from http://www.webtoolkit.info/javascript-sha1.html
function SHA1(msg) {
function rotate_left(n,s) {
var t4 = ( n<<s ) | (n>>>(32-s));
return t4;
};
function lsb_hex(val) {
var str="";
var i;
var vh;
var vl;
for( i=0; i<=6; i+=2 ) {
vh = (val>>>(i*4+4))&0x0f;
vl = (val>>>(i*4))&0x0f;
str += vh.toString(16) + vl.toString(16);
}
return str;
};
function cvt_hex(val) {
var str="";
var i;
var v;
for( i=7; i>=0; i-- ) {
v = (val>>>(i*4))&0x0f;
str += v.toString(16);
}
return str;
};
function Utf8Encode(string) {
string = string.replace(/\r\n/g,"\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
}
else if((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
}
else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
};
var blockstart;
var i, j;
var W = new Array(80);
var H0 = 0x67452301;
var H1 = 0xEFCDAB89;
var H2 = 0x98BADCFE;
var H3 = 0x10325476;
var H4 = 0xC3D2E1F0;
var A, B, C, D, E;
var temp;
msg = Utf8Encode(msg);
var msg_len = msg.length;
var word_array = new Array();
for( i=0; i<msg_len-3; i+=4 ) {
j = msg.charCodeAt(i)<<24 | msg.charCodeAt(i+1)<<16 |
msg.charCodeAt(i+2)<<8 | msg.charCodeAt(i+3);
word_array.push( j );
}
switch( msg_len % 4 ) {
case 0:
i = 0x080000000;
break;
case 1:
i = msg.charCodeAt(msg_len-1)<<24 | 0x0800000;
break;
case 2:
i = msg.charCodeAt(msg_len-2)<<24 | msg.charCodeAt(msg_len-1)<<16 | 0x08000;
break;
case 3:
i = msg.charCodeAt(msg_len-3)<<24 | msg.charCodeAt(msg_len-2)<<16 | msg.charCodeAt(msg_len-1)<<8 | 0x80;
break;
}
word_array.push( i );
while( (word_array.length % 16) != 14 ) word_array.push( 0 );
word_array.push( msg_len>>>29 );
word_array.push( (msg_len<<3)&0x0ffffffff );
for ( blockstart=0; blockstart<word_array.length; blockstart+=16 ) {
for( i=0; i<16; i++ ) W[i] = word_array[blockstart+i];
for( i=16; i<=79; i++ ) W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);
A = H0;
B = H1;
C = H2;
D = H3;
E = H4;
for( i= 0; i<=19; i++ ) {
temp = (rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
E = D;
D = C;
C = rotate_left(B,30);
B = A;
A = temp;
}
for( i=20; i<=39; i++ ) {
temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;
E = D;
D = C;
C = rotate_left(B,30);
B = A;
A = temp;
}
for( i=40; i<=59; i++ ) {
temp = (rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
E = D;
D = C;
C = rotate_left(B,30);
B = A;
A = temp;
}
for( i=60; i<=79; i++ ) {
temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;
E = D;
D = C;
C = rotate_left(B,30);
B = A;
A = temp;
}
H0 = (H0 + A) & 0x0ffffffff;
H1 = (H1 + B) & 0x0ffffffff;
H2 = (H2 + C) & 0x0ffffffff;
H3 = (H3 + D) & 0x0ffffffff;
H4 = (H4 + E) & 0x0ffffffff;
}
var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4);
return temp.toLowerCase();
}
//I'm lazy, this is helpful
String.prototype.clearAfter = function(text) {
var indexOf = this.indexOf(text);
return (indexOf > 0) ? this.substr(0,indexOf) : this.toString();
}
String.prototype.clearBefore = function(text) {
var indexOf = this.indexOf(text);
return (indexOf > 0) ? this.substr(indexOf+1) : this.toString();
}
//"
String.prototype.regexIndexOf = function(regex, startpos) {
var indexOf = this.substring(startpos || 0).search(regex);
return (indexOf >= 0) ? (indexOf + (startpos || 0)) : indexOf;
}
//"
String.prototype.escapeRegExp = function() {
return this.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&").replace(" ","\\s");
}
exports.ext = {
"application/andrew-inset":"ez",
"application/applixware":"aw",
"application/atom+xml":"atom",
"application/atomcat+xml":"atomcat",
"application/atomsvc+xml":"atomsvc",
"application/ccxml+xml":"ccxml",
"application/cdmi-capability":"cdmia",
"application/cdmi-container":"cdmic",
"application/cdmi-domain":"cdmid",
"application/cdmi-object":"cdmio",
"application/cdmi-queue":"cdmiq",
"application/cu-seeme":"cu",
"application/davmount+xml":"davmount",
"application/docbook+xml":"dbk",
"application/dssc+der":"dssc",
"application/dssc+xml":"xdssc",
"application/ecmascript":"ecma",
"application/emma+xml":"emma",
"application/epub+zip":"epub",
"application/exi":"exi",
"application/font-tdpfr":"pfr",
"application/gml+xml":"gml",
"application/gpx+xml":"gpx",
"application/gxf":"gxf",
"application/hyperstudio":"stk",
"application/inkml+xml":"ink",
"application/ipfix":"ipfix",
"application/java-archive":"jar",
"application/java-serialized-object":"ser",
"application/java-vm":"class",
"application/javascript":"js",
"application/json":"json",
"application/jsonml+json":"jsonml",
"application/lost+xml":"lostxml",
"application/mac-binhex40":"hqx",
"application/mac-compactpro":"cpt",
"application/mads+xml":"mads",
"application/marc":"mrc",
"application/marcxml+xml":"mrcx",
"application/mathematica":"ma",
"application/mathml+xml":"mathml",
"application/mbox":"mbox",
"application/mediaservercontrol+xml":"mscml",
"application/metalink+xml":"metalink",
"application/metalink4+xml":"meta4",
"application/mets+xml":"mets",
"application/mods+xml":"mods",
"application/mp21":"m21",
"application/mp4":"mp4s",
"application/msword":"doc",
"application/mxf":"mxf",
"application/octet-stream":"bin",
"application/oda":"oda",
"application/oebps-package+xml":"opf",
"application/ogg":"ogx",
"application/omdoc+xml":"omdoc",
"application/onenote":"onetoc",
"application/oxps":"oxps",
"application/patch-ops-error+xml":"xer",
"application/pdf":"pdf",
"application/pgp-encrypted":"pgp",
"application/pgp-signature":"asc",
"application/pics-rules":"prf",
"application/pkcs10":"p10",
"application/pkcs7-mime":"p7m",
"application/pkcs7-signature":"p7s",
"application/pkcs8":"p8",
"application/pkix-attr-cert":"ac",
"application/pkix-cert":"cer",
"application/pkix-crl":"crl",
"application/pkix-pkipath":"pkipath",
"application/pkixcmp":"pki",
"application/pls+xml":"pls",
"application/postscript":"ai",
"application/prs.cww":"cww",
"application/pskc+xml":"pskcxml",
"application/rdf+xml":"rdf",
"application/reginfo+xml":"rif",
"application/relax-ng-compact-syntax":"rnc",
"application/resource-lists+xml":"rl",
"application/resource-lists-diff+xml":"rld",
"application/rls-services+xml":"rs",
"application/rpki-ghostbusters":"gbr",
"application/rpki-manifest":"mft",
"application/rpki-roa":"roa",
"application/rsd+xml":"rsd",
"application/rss+xml":"rss",
"application/rtf":"rtf",
"application/sbml+xml":"sbml",
"application/scvp-cv-request":"scq",
"application/scvp-cv-response":"scs",
"application/scvp-vp-request":"spq",
"application/scvp-vp-response":"spp",
"application/sdp":"sdp",
"application/set-payment-initiation":"setpay",
"application/set-registration-initiation":"setreg",
"application/shf+xml":"shf",
"application/smil+xml":"smi",
"application/sparql-query":"rq",
"application/sparql-results+xml":"srx",
"application/srgs":"gram",
"application/srgs+xml":"grxml",
"application/sru+xml":"sru",
"application/ssdl+xml":"ssdl",
"application/ssml+xml":"ssml",
"application/tei+xml":"tei",
"application/thraud+xml":"tfi",
"application/timestamped-data":"tsd",
"application/vnd.3gpp.pic-bw-large":"plb",
"application/vnd.3gpp.pic-bw-small":"psb",
"application/vnd.3gpp.pic-bw-var":"pvb",
"application/vnd.3gpp2.tcap":"tcap",
"application/vnd.3m.post-it-notes":"pwn",
"application/vnd.accpac.simply.aso":"aso",
"application/vnd.accpac.simply.imp":"imp",
"application/vnd.acucobol":"acu",
"application/vnd.acucorp":"atc",
"application/vnd.adobe.air-application-installer-package+zip":"air",
"application/vnd.adobe.formscentral.fcdt":"fcdt",
"application/vnd.adobe.fxp":"fxp",
"application/vnd.adobe.xdp+xml":"xdp",
"application/vnd.adobe.xfdf":"xfdf",
"application/vnd.ahead.space":"ahead",
"application/vnd.airzip.filesecure.azf":"azf",
"application/vnd.airzip.filesecure.azs":"azs",
"application/vnd.amazon.ebook":"azw",
"application/vnd.americandynamics.acc":"acc",
"application/vnd.amiga.ami":"ami",
"application/vnd.android.package-archive":"apk",
"application/vnd.anser-web-certificate-issue-initiation":"cii",
"application/vnd.anser-web-funds-transfer-initiation":"fti",
"application/vnd.antix.game-component":"atx",
"application/vnd.apple.installer+xml":"mpkg",
"application/vnd.apple.mpegurl":"m3u8",
"application/vnd.aristanetworks.swi":"swi",
"application/vnd.astraea-software.iota":"iota",
"application/vnd.audiograph":"aep",
"application/vnd.blueice.multipass":"mpm",
"application/vnd.bmi":"bmi",
"application/vnd.businessobjects":"rep",
"application/vnd.chemdraw+xml":"cdxml",
"application/vnd.chipnuts.karaoke-mmd":"mmd",
"application/vnd.cinderella":"cdy",
"application/vnd.claymore":"cla",
"application/vnd.cloanto.rp9":"rp9",
"application/vnd.clonk.c4group":"c4g",
"application/vnd.cluetrust.cartomobile-config":"c11amc",
"application/vnd.cluetrust.cartomobile-config-pkg":"c11amz",
"application/vnd.commonspace":"csp",
"application/vnd.contact.cmsg":"cdbcmsg",
"application/vnd.cosmocaller":"cmc",
"application/vnd.crick.clicker":"clkx",
"application/vnd.crick.clicker.keyboard":"clkk",
"application/vnd.crick.clicker.palette":"clkp",
"application/vnd.crick.clicker.template":"clkt",
"application/vnd.crick.clicker.wordbank":"clkw",
"application/vnd.criticaltools.wbs+xml":"wbs",
"application/vnd.ctc-posml":"pml",
"application/vnd.cups-ppd":"ppd",
"application/vnd.curl.car":"car",
"application/vnd.curl.pcurl":"pcurl",
"application/vnd.dart":"dart",
"application/vnd.data-vision.rdz":"rdz",
"application/vnd.dece.data":"uvf",
"application/vnd.dece.ttml+xml":"uvt",
"application/vnd.dece.unspecified":"uvx",
"application/vnd.dece.zip":"uvz",
"application/vnd.denovo.fcselayout-link":"fe",
"application/vnd.dna":"dna",
"application/vnd.dolby.mlp":"mlp",
"application/vnd.dpgraph":"dpg",
"application/vnd.dreamfactory":"dfac",
"application/vnd.ds-keypoint":"kpxx",
"application/vnd.dvb.ait":"ait",
"application/vnd.dvb.service":"svc",
"application/vnd.dynageo":"geo",
"application/vnd.ecowin.chart":"mag",
"application/vnd.enliven":"nml",
"application/vnd.epson.esf":"esf",
"application/vnd.epson.msf":"msf",
"application/vnd.epson.quickanime":"qam",
"application/vnd.epson.salt":"slt",
"application/vnd.epson.ssf":"ssf",
"application/vnd.eszigno3+xml":"es3",
"application/vnd.ezpix-album":"ez2",
"application/vnd.ezpix-package":"ez3",
"application/vnd.fdf":"fdf",
"application/vnd.fdsn.mseed":"mseed",
"application/vnd.fdsn.seed":"seed",
"application/vnd.flographit":"gph",
"application/vnd.fluxtime.clip":"ftc",
"application/vnd.framemaker":"fm",
"application/vnd.frogans.fnc":"fnc",
"application/vnd.frogans.ltf":"ltf",
"application/vnd.fsc.weblaunch":"fsc",
"application/vnd.fujitsu.oasys":"oas",
"application/vnd.fujitsu.oasys2":"oa2",
"application/vnd.fujitsu.oasys3":"oa3",
"application/vnd.fujitsu.oasysgp":"fg5",
"application/vnd.fujitsu.oasysprs":"bh2",
"application/vnd.fujixerox.ddd":"ddd",
"application/vnd.fujixerox.docuworks":"xdw",
"application/vnd.fujixerox.docuworks.binder":"xbd",
"application/vnd.fuzzysheet":"fzs",
"application/vnd.genomatix.tuxedo":"txd",
"application/vnd.geogebra.file":"ggb",
"application/vnd.geogebra.tool":"ggt",
"application/vnd.geometry-explorer":"gex",
"application/vnd.geonext":"gxt",
"application/vnd.geoplan":"g2w",
"application/vnd.geospace":"g3w",
"application/vnd.gmx":"gmx",
"application/vnd.google-earth.kml+xml":"kml",
"application/vnd.google-earth.kmz":"kmz",
"application/vnd.grafeq":"gqf",
"application/vnd.groove-account":"gac",
"application/vnd.groove-help":"ghf",
"application/vnd.groove-identity-message":"gim",
"application/vnd.groove-injector":"grv",
"application/vnd.groove-tool-message":"gtm",
"application/vnd.groove-tool-template":"tpl",
"application/vnd.groove-vcard":"vcg",
"application/vnd.hal+xml":"hal",
"application/vnd.handheld-entertainment+xml":"zmm",
"application/vnd.hbci":"hbci",
"application/vnd.hhe.lesson-player":"les",
"application/vnd.hp-hpgl":"hpgl",
"application/vnd.hp-hpid":"hpid",
"application/vnd.hp-hps":"hps",
"application/vnd.hp-jlyt":"jlt",
"application/vnd.hp-pcl":"pcl",
"application/vnd.hp-pclxl":"pclxl",
"application/vnd.hydrostatix.sof-data":"sfd",
"application/vnd.ibm.minipay":"mpy",
"application/vnd.ibm.modcap":"afp",
"application/vnd.ibm.rights-management":"irm",
"application/vnd.ibm.secure-container":"sc",
"application/vnd.iccprofile":"icc",
"application/vnd.igloader":"igl",
"application/vnd.immervision-ivp":"ivp",
"application/vnd.immervision-ivu":"ivu",
"application/vnd.insors.igm":"igm",
"application/vnd.intercon.formnet":"xpw",
"application/vnd.intergeo":"i2g",
"application/vnd.intu.qbo":"qbo",
"application/vnd.intu.qfx":"qfx",
"application/vnd.ipunplugged.rcprofile":"rcprofile",
"application/vnd.irepository.package+xml":"irp",
"application/vnd.is-xpr":"xpr",
"application/vnd.isac.fcs":"fcs",
"application/vnd.jam":"jam",
"application/vnd.jcp.javame.midlet-rms":"rms",
"application/vnd.jisp":"jisp",
"application/vnd.joost.joda-archive":"joda",
"application/vnd.kahootz":"ktz",
"application/vnd.kde.karbon":"karbon",
"application/vnd.kde.kchart":"chrt",
"application/vnd.kde.kformula":"kfo",
"application/vnd.kde.kivio":"flw",
"application/vnd.kde.kontour":"kon",
"application/vnd.kde.kpresenter":"kpr",
"application/vnd.kde.kspread":"ksp",
"application/vnd.kde.kword":"kwd",
"application/vnd.kenameaapp":"htke",
"application/vnd.kidspiration":"kia",
"application/vnd.kinar":"kne",
"application/vnd.koan":"skp",
"application/vnd.kodak-descriptor":"sse",
"application/vnd.las.las+xml":"lasxml",
"application/vnd.llamagraphics.life-balance.desktop":"lbd",
"application/vnd.llamagraphics.life-balance.exchange+xml":"lbe",
"application/vnd.lotus-1-2-3":"123",
"application/vnd.lotus-approach":"apr",
"application/vnd.lotus-freelance":"pre",
"application/vnd.lotus-notes":"nsf",
"application/vnd.lotus-organizer":"org",
"application/vnd.lotus-screencam":"scm",
"application/vnd.lotus-wordpro":"lwp",
"application/vnd.macports.portpkg":"portpkg",
"application/vnd.mcd":"mcd",
"application/vnd.medcalcdata":"mc1",
"application/vnd.mediastation.cdkey":"cdkey",
"application/vnd.mfer":"mwf",
"application/vnd.mfmp":"mfm",
"application/vnd.micrografx.flo":"flo",
"application/vnd.micrografx.igx":"igx",
"application/vnd.mif":"mif",
"application/vnd.mobius.daf":"daf",
"application/vnd.mobius.dis":"dis",
"application/vnd.mobius.mbk":"mbk",
"application/vnd.mobius.mqy":"mqy",
"application/vnd.mobius.msl":"msl",
"application/vnd.mobius.plc":"plc",
"application/vnd.mobius.txf":"txf",
"application/vnd.mophun.application":"mpn",
"application/vnd.mophun.certificate":"mpc",
"application/vnd.mozilla.xul+xml":"xul",
"application/vnd.ms-artgalry":"cil",
"application/vnd.ms-cab-compressed":"cab",
"application/vnd.ms-excel":"xls",
"application/vnd.ms-excel.addin.macroenabled.12":"xlam",
"application/vnd.ms-excel.sheet.binary.macroenabled.12":"xlsb",
"application/vnd.ms-excel.sheet.macroenabled.12":"xlsm",
"application/vnd.ms-excel.template.macroenabled.12":"xltm",
"application/vnd.ms-fontobject":"eot",
"application/vnd.ms-htmlhelp":"chm",
"application/vnd.ms-ims":"ims",
"application/vnd.ms-lrm":"lrm",
"application/vnd.ms-officetheme":"thmx",
"application/vnd.ms-pki.seccat":"cat",
"application/vnd.ms-pki.stl":"stl",
"application/vnd.ms-powerpoint":"ppt",
"application/vnd.ms-powerpoint.addin.macroenabled.12":"ppam",
"application/vnd.ms-powerpoint.presentation.macroenabled.12":"pptm",
"application/vnd.ms-powerpoint.slide.macroenabled.12":"sldm",
"application/vnd.ms-powerpoint.slideshow.macroenabled.12":"ppsm",
"application/vnd.ms-powerpoint.template.macroenabled.12":"potm",
"application/vnd.ms-project":"mpp",
"application/vnd.ms-word.document.macroenabled.12":"docm",
"application/vnd.ms-word.template.macroenabled.12":"dotm",
"application/vnd.ms-works":"wps",
"application/vnd.ms-wpl":"wpl",
"application/vnd.ms-xpsdocument":"xps",
"application/vnd.mseq":"mseq",
"application/vnd.musician":"mus",
"application/vnd.muvee.style":"msty",
"application/vnd.mynfc":"taglet",
"application/vnd.neurolanguage.nlu":"nlu",
"application/vnd.nitf":"ntf",
"application/vnd.noblenet-directory":"nnd",
"application/vnd.noblenet-sealer":"nns",
"application/vnd.noblenet-web":"nnw",
"application/vnd.nokia.n-gage.data":"ngdat",
"application/vnd.nokia.n-gage.symbian.install":"n",
"application/vnd.nokia.radio-preset":"rpst",
"application/vnd.nokia.radio-presets":"rpss",
"application/vnd.novadigm.edm":"edm",
"application/vnd.novadigm.edx":"edx",
"application/vnd.novadigm.ext":"ext",
"application/vnd.oasis.opendocument.chart":"odc",
"application/vnd.oasis.opendocument.chart-template":"otc",
"application/vnd.oasis.opendocument.database":"odb",
"application/vnd.oasis.opendocument.formula":"odf",
"application/vnd.oasis.opendocument.formula-template":"odft",
"application/vnd.oasis.opendocument.graphics":"odg",
"application/vnd.oasis.opendocument.graphics-template":"otg",
"application/vnd.oasis.opendocument.image":"odi",
"application/vnd.oasis.opendocument.image-template":"oti",
"application/vnd.oasis.opendocument.presentation":"odp",
"application/vnd.oasis.opendocument.presentation-template":"otp",
"application/vnd.oasis.opendocument.spreadsheet":"ods",
"application/vnd.oasis.opendocument.spreadsheet-template":"ots",
"application/vnd.oasis.opendocument.text":"odt",
"application/vnd.oasis.opendocument.text-master":"odm",
"application/vnd.oasis.opendocument.text-template":"ott",
"application/vnd.oasis.opendocument.text-web":"oth",
"application/vnd.olpc-sugar":"xo",
"application/vnd.oma.dd2+xml":"dd2",
"application/vnd.openofficeorg.extension":"oxt",
"application/vnd.openxmlformats-officedocument.presentationml.presentation":"pptx",
"application/vnd.openxmlformats-officedocument.presentationml.slide":"sldx",
"application/vnd.openxmlformats-officedocument.presentationml.slideshow":"ppsx",
"application/vnd.openxmlformats-officedocument.presentationml.template":"potx",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"xlsx",
"application/vnd.openxmlformats-officedocument.spreadsheetml.template":"xltx",
"application/vnd.openxmlformats-officedocument.wordprocessingml.document":"docx",
"application/vnd.openxmlformats-officedocument.wordprocessingml.template":"dotx",
"application/vnd.osgeo.mapguide.package":"mgp",
"application/vnd.osgi.dp":"dp",
"application/vnd.osgi.subsystem":"esa",
"application/vnd.palm":"pdb",
"application/vnd.pawaafile":"paw",
"application/vnd.pg.format":"str",
"application/vnd.pg.osasli":"ei6",
"application/vnd.picsel":"efif",
"application/vnd.pmi.widget":"wg",
"application/vnd.pocketlearn":"plf",
"application/vnd.powerbuilder6":"pbd",
"application/vnd.previewsystems.box":"box",
"application/vnd.proteus.magazine":"mgz",
"application/vnd.publishare-delta-tree":"qps",
"application/vnd.pvi.ptid1":"ptid",
"application/vnd.quark.quarkxpress":"qxd",
"application/vnd.realvnc.bed":"bed",
"application/vnd.recordare.musicxml":"mxl",
"application/vnd.recordare.musicxml+xml":"musicxml",
"application/vnd.rig.cryptonote":"cryptonote",
"application/vnd.rim.cod":"cod",
"application/vnd.rn-realmedia":"rm",
"application/vnd.rn-realmedia-vbr":"rmvb",
"application/vnd.route66.link66+xml":"link66",
"application/vnd.sailingtracker.track":"st",
"application/vnd.seemail":"see",
"application/vnd.sema":"sema",
"application/vnd.semd":"semd",
"application/vnd.semf":"semf",
"application/vnd.shana.informed.formdata":"ifm",
"application/vnd.shana.informed.formtemplate":"itp",
"application/vnd.shana.informed.interchange":"iif",
"application/vnd.shana.informed.package":"ipk",
"application/vnd.simtech-mindmapper":"twd",
"application/vnd.smaf":"mmf",
"application/vnd.smart.teacher":"teacher",
"application/vnd.solent.sdkm+xml":"sdkm",
"application/vnd.spotfire.dxp":"dxp",
"application/vnd.spotfire.sfs":"sfs",
"application/vnd.stardivision.calc":"sdc",
"application/vnd.stardivision.draw":"sda",
"application/vnd.stardivision.impress":"sdd",
"application/vnd.stardivision.math":"smf",
"application/vnd.stardivision.writer":"sdw",
"application/vnd.stardivision.writer-global":"sgl",
"application/vnd.stepmania.package":"smzip",
"application/vnd.stepmania.stepchart":"sm",
"application/vnd.sun.xml.calc":"sxc",
"application/vnd.sun.xml.calc.template":"stc",
"application/vnd.sun.xml.draw":"sxd",
"application/vnd.sun.xml.draw.template":"std",
"application/vnd.sun.xml.impress":"sxi",
"application/vnd.sun.xml.impress.template":"sti",
"application/vnd.sun.xml.math":"sxm",
"application/vnd.sun.xml.writer":"sxw",
"application/vnd.sun.xml.writer.global":"sxg",
"application/vnd.sun.xml.writer.template":"stw",
"application/vnd.sus-calendar":"sus",
"application/vnd.svd":"svd",
"application/vnd.symbian.install":"sis",
"application/vnd.syncml+xml":"xsm",
"application/vnd.syncml.dm+wbxml":"bdm",
"application/vnd.syncml.dm+xml":"xdm",
"application/vnd.tao.intent-module-archive":"tao",
"application/vnd.tcpdump.pcap":"pcap",
"application/vnd.tmobile-livetv":"tmo",
"application/vnd.trid.tpt":"tpt",
"application/vnd.triscape.mxs":"mxs",
"application/vnd.trueapp":"tra",
"application/vnd.ufdl":"ufd",
"application/vnd.uiq.theme":"utz",
"application/vnd.umajin":"umj",
"application/vnd.unity":"unityweb",
"application/vnd.uoml+xml":"uoml",
"application/vnd.vcx":"vcx",
"application/vnd.visio":"vsd",
"application/vnd.visionary":"vis",
"application/vnd.vsf":"vsf",
"application/vnd.wap.wbxml":"wbxml",
"application/vnd.wap.wmlc":"wmlc",
"application/vnd.wap.wmlscriptc":"wmlsc",
"application/vnd.webturbo":"wtb",
"application/vnd.wolfram.player":"nbp",
"application/vnd.wordperfect":"wpd",
"application/vnd.wqd":"wqd",
"application/vnd.wt.stf":"stf",
"application/vnd.xara":"xar",
"application/vnd.xfdl":"xfdl",
"application/vnd.yamaha.hv-dic":"hvd",
"application/vnd.yamaha.hv-script":"hvs",
"application/vnd.yamaha.hv-voice":"hvp",
"application/vnd.yamaha.openscoreformat":"osf",
"application/vnd.yamaha.openscoreformat.osfpvg+xml":"osfpvg",
"application/vnd.yamaha.smaf-audio":"saf",
"application/vnd.yamaha.smaf-phrase":"spf",
"application/vnd.yellowriver-custom-menu":"cmp",
"application/vnd.zul":"zir",
"application/vnd.zzazz.deck+xml":"zaz",
"application/voicexml+xml":"vxml",
"application/widget":"wgt",
"application/winhlp":"hlp",
"application/wsdl+xml":"wsdl",
"application/wspolicy+xml":"wspolicy",
"application/x-7z-compressed":"7z",
"application/x-abiword":"abw",
"application/x-ace-compressed":"ace",
"application/x-apple-diskimage":"dmg",
"application/x-authorware-bin":"aab",
"application/x-authorware-map":"aam",
"application/x-authorware-seg":"aas",
"application/x-bcpio":"bcpio",
"application/x-bittorrent":"torrent",
"application/x-blorb":"blb",
"application/x-bzip":"bz",
"application/x-bzip2":"bz2",
"application/x-cbr":"cbr",
"application/x-cdlink":"vcd",
"application/x-cfs-compressed":"cfs",
"application/x-chat":"chat",
"application/x-chess-pgn":"pgn",
"application/x-conference":"nsc",
"application/x-cpio":"cpio",
"application/x-csh":"csh",
"application/x-debian-package":"deb",
"application/x-dgc-compressed":"dgc",
"application/x-director":"dir",
"application/x-doom":"wad",
"application/x-dtbncx+xml":"ncx",
"application/x-dtbook+xml":"dtb",
"application/x-dtbresource+xml":"res",
"application/x-dvi":"dvi",
"application/x-envoy":"evy",
"application/x-eva":"eva",
"application/x-font-bdf":"bdf",
"application/x-font-ghostscript":"gsf",
"application/x-font-linux-psf":"psf",
"application/x-font-otf":"otf",
"application/x-font-pcf":"pcf",
"application/x-font-snf":"snf",
"application/x-font-ttf":"ttf",
"application/x-font-type1":"pfa",
"application/x-font-woff":"woff",
"application/x-freearc":"arc",
"application/x-futuresplash":"spl",
"application/x-gca-compressed":"gca",
"application/x-glulx":"ulx",
"application/x-gnumeric":"gnumeric",
"application/x-gramps-xml":"gramps",
"application/x-gtar":"gtar",
"application/x-hdf":"hdf",
"application/x-install-instructions":"install",
"application/x-iso9660-image":"iso",
"application/x-java-jnlp-file":"jnlp",
"application/x-latex":"latex",
"application/x-lzh-compressed":"lzh",
"application/x-mie":"mie",
"application/x-mobipocket-ebook":"prc",
"application/x-ms-application":"application",
"application/x-ms-shortcut":"lnk",
"application/x-ms-wmd":"wmd",
"application/x-ms-wmz":"wmz",
"application/x-ms-xbap":"xbap",
"application/x-msaccess":"mdb",
"application/x-msbinder":"obd",
"application/x-mscardfile":"crd",
"application/x-msclip":"clp",
"application/x-msdownload":"exe",
"application/x-msmediaview":"mvb",
"application/x-msmetafile":"wmf",
"application/x-msmoney":"mny",
"application/x-mspublisher":"pub",
"application/x-msschedule":"scd",
"application/x-msterminal":"trm",
"application/x-mswrite":"wri",
"application/x-netcdf":"nc",
"application/x-nzb":"nzb",
"application/x-pkcs12":"p12",
"application/x-pkcs7-certificates":"p7b",
"application/x-pkcs7-certreqresp":"p7r",
"application/x-rar-compressed":"rar",
"application/x-research-info-systems":"ris",
"application/x-sh":"sh",
"application/x-shar":"shar",
"application/x-shockwave-flash":"swf",
"application/x-silverlight-app":"xap",
"application/x-sql":"sql",
"application/x-stuffit":"sit",
"application/x-stuffitx":"sitx",
"application/x-subrip":"srt",
"application/x-sv4cpio":"sv4cpio",
"application/x-sv4crc":"sv4crc",
"application/x-t3vm-image":"t3",
"application/x-tads":"gam",
"application/x-tar":"tar",
"application/x-tcl":"tcl",
"application/x-tex":"tex",
"application/x-tex-tfm":"tfm",
"application/x-texinfo":"texinfo",
"application/x-tgif":"obj",
"application/x-ustar":"ustar",
"application/x-wais-source":"src",
"application/x-x509-ca-cert":"der",
"application/x-xfig":"fig",
"application/x-xliff+xml":"xlf",
"application/x-xpinstall":"xpi",
"application/x-xz":"xz",
"application/x-zmachine":"z1",
"application/xaml+xml":"xaml",
"application/xcap-diff+xml":"xdf",
"application/xenc+xml":"xenc",
"application/xhtml+xml":"xhtml",
"application/xml":"xml",
"application/xml-dtd":"dtd",
"application/xop+xml":"xop",
"application/xproc+xml":"xpl",
"application/xslt+xml":"xslt",
"application/xspf+xml":"xspf",
"application/xv+xml":"mxml",
"application/yang":"yang",
"application/yin+xml":"yin",
"application/zip":"zip",
"audio/adpcm":"adp",
"audio/basic":"au",
"audio/midi":"mid",
"audio/mp4":"mp4a",
"audio/mpeg":"mpga",
"audio/ogg":"oga",
"audio/s3m":"s3m",
"audio/silk":"sil",
"audio/vnd.dece.audio":"uva",
"audio/vnd.digital-winds":"eol",
"audio/vnd.dra":"dra",
"audio/vnd.dts":"dts",
"audio/vnd.dts.hd":"dtshd",
"audio/vnd.lucent.voice":"lvp",
"audio/vnd.ms-playready.media.pya":"pya",
"audio/vnd.nuera.ecelp4800":"ecelp4800",
"audio/vnd.nuera.ecelp7470":"ecelp7470",
"audio/vnd.nuera.ecelp9600":"ecelp9600",
"audio/vnd.rip":"rip",
"audio/webm":"weba",
"audio/x-aac":"aac",
"audio/x-aiff":"aif",
"audio/x-caf":"caf",
"audio/x-flac":"flac",
"audio/x-matroska":"mka",
"audio/x-mpegurl":"m3u",
"audio/x-ms-wax":"wax",
"audio/x-ms-wma":"wma",
"audio/x-pn-realaudio":"ram",
"audio/x-pn-realaudio-plugin":"rmp",
"audio/x-wav":"wav",
"audio/xm":"xm",
"chemical/x-cdx":"cdx",
"chemical/x-cif":"cif",
"chemical/x-cmdf":"cmdf",
"chemical/x-cml":"cml",
"chemical/x-csml":"csml",
"chemical/x-xyz":"xyz",
"image/bmp":"bmp",
"image/cgm":"cgm",
"image/g3fax":"g3",
"image/gif":"gif",
"image/ief":"ief",
"image/jpeg":"jpeg",
"image/ktx":"ktx",
"image/png":"png",
"image/prs.btif":"btif",
"image/sgi":"sgi",
"image/svg+xml":"svg",
"image/tiff":"tiff",
"image/vnd.adobe.photoshop":"psd",
"image/vnd.dece.graphic":"uvi",
"image/vnd.dvb.subtitle":"sub",
"image/vnd.djvu":"djvu",
"image/vnd.dwg":"dwg",
"image/vnd.dxf":"dxf",
"image/vnd.fastbidsheet":"fbs",
"image/vnd.fpx":"fpx",
"image/vnd.fst":"fst",
"image/vnd.fujixerox.edmics-mmr":"mmr",
"image/vnd.fujixerox.edmics-rlc":"rlc",
"image/vnd.ms-modi":"mdi",
"image/vnd.ms-photo":"wdp",
"image/vnd.net-fpx":"npx",
"image/vnd.wap.wbmp":"wbmp",
"image/vnd.xiff":"xif",
"image/webp":"webp",
"image/x-3ds":"3ds",
"image/x-cmu-raster":"ras",
"image/x-cmx":"cmx",
"image/x-freehand":"fh",
"image/x-icon":"ico",
"image/x-mrsid-image":"sid",
"image/x-pcx":"pcx",
"image/x-pict":"pic",
"image/x-portable-anymap":"pnm",
"image/x-portable-bitmap":"pbm",
"image/x-portable-graymap":"pgm",
"image/x-portable-pixmap":"ppm",
"image/x-rgb":"rgb",
"image/x-tga":"tga",
"image/x-xbitmap":"xbm",
"image/x-xpixmap":"xpm",
"image/x-xwindowdump":"xwd",
"message/rfc822":"eml",
"model/iges":"igs",
"model/mesh":"msh",
"model/vnd.collada+xml":"dae",
"model/vnd.dwf":"dwf",
"model/vnd.gdl":"gdl",
"model/vnd.gtw":"gtw",
"model/vnd.mts":"mts",
"model/vnd.vtu":"vtu",
"model/vrml":"wrl",
"model/x3d+binary":"x3db",
"model/x3d+vrml":"x3dv",
"model/x3d+xml":"x3d",
"text/cache-manifest":"appcache",
"text/calendar":"ics",
"text/css":"css",
"text/csv":"csv",
"text/javascript":"js",
"text/html":"html",
"text/n3":"n3",
"text/plain":"txt",
"text/prs.lines.tag":"dsc",
"text/richtext":"rtx",
"text/sgml":"sgml",
"text/tab-separated-values":"tsv",
"text/troff":"t",
"text/turtle":"ttl",
"text/uri-list":"uri",
"text/vcard":"vcard",
"text/vnd.curl":"curl",
"text/vnd.curl.dcurl":"dcurl",
"text/vnd.curl.scurl":"scurl",
"text/vnd.curl.mcurl":"mcurl",
"text/vnd.dvb.subtitle":"sub",
"text/vnd.fly":"fly",
"text/vnd.fmi.flexstor":"flx",
"text/vnd.graphviz":"gv",
"text/vnd.in3d.3dml":"3dml",
"text/vnd.in3d.spot":"spot",
"text/vnd.sun.j2me.app-descriptor":"jad",
"text/vnd.wap.wml":"wml",
"text/vnd.wap.wmlscript":"wmls",
"text/x-asm":"s",
"text/x-c":"c",
"text/x-fortran":"f",
"text/x-java-source":"java",
"text/x-opml":"opml",
"text/x-pascal":"p",
"text/x-nfo":"nfo",
"text/x-setext":"etx",
"text/x-sfv":"sfv",
"text/x-uuencode":"uu",
"text/x-vcalendar":"vcs",
"text/x-vcard":"vcf",
"video/3gpp":"3gp",
"video/3gpp2":"3g2",
"video/h261":"h261",
"video/h263":"h263",
"video/h264":"h264",
"video/jpeg":"jpgv",
"video/jpm":"jpm",
"video/mj2":"mj2",
"video/mp4":"mp4",
"video/mpeg":"mpeg",
"video/ogg":"ogv",
"video/quicktime":"qt",
"video/vnd.dece.hd":"uvh",
"video/vnd.dece.mobile":"uvm",
"video/vnd.dece.pd":"uvp",
"video/vnd.dece.sd":"uvs",
"video/vnd.dece.video":"uvv",
"video/vnd.dvb.file":"dvb",
"video/vnd.fvt":"fvt",
"video/vnd.mpegurl":"mxu",
"video/vnd.ms-playready.media.pyv":"pyv",
"video/vnd.uvvu.mp4":"uvu",
"video/vnd.vivo":"viv",
"video/webm":"webm",
"video/x-f4v":"f4v",
"video/x-fli":"fli",
"video/x-flv":"flv",
"video/x-m4v":"m4v",
"video/x-matroska":"mkv",
"video/x-mng":"mng",
"video/x-ms-asf":"asf",
"video/x-ms-vob":"vob",
"video/x-ms-wm":"wm",
"video/x-ms-wmv":"wmv",
"video/x-ms-wmx":"wmx",
"video/x-ms-wvx":"wvx",
"video/x-msvideo":"avi",
"video/x-sgi-movie":"movie",
"video/x-smv":"smv",
"x-conference/x-cooltalk":"ice"
};
//for this to work, you have to call phantomjs with the cache enabled:
//usage: phantomjs --disk-cache=true test.js
var page = require('webpage').create();
var fs = require('fs');
var cache = require('./cache');
var mimetype = require('./mimetype');
//this is the path that QTNetwork classes uses for caching files for it's http client
//the path should be the one that has 16 folders labeled 0,1,2,3,...,F
cache.cachePath = '/Users/brandon/Library/Caches/Ofi Labs/PhantomJS/data7/';
var url = 'http://google.com';
page.viewportSize = { width: 1300, height: 768 };
//when the resource is received, go ahead and include a reference to it in the cache object
page.onResourceReceived = function(response) {
//I only cache images, but you can change this
if(response.contentType.indexOf('image') >= 0)
{
cache.includeResource(response);
}
};
//when the page is done loading, go through each cachedResource and do something with it,
//I'm just saving them to a file
page.onLoadFinished = function(status) {
for(index in cache.cachedResources) {
var file = cache.cachedResources[index].cacheFileNoPath;
var ext = mimetype.ext[cache.cachedResources[index].mimetype];
var finalFile = file.replace("."+cache.cacheExtension,"."+ext);
fs.write('saved/'+finalFile,cache.cachedResources[index].getContents(),'b');
}
};
page.open(url, function () {
page.render('saved/google.pdf');
phantom.exit();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment