How can I read Chrome Cache files?

前端 未结 12 1131
無奈伤痛
無奈伤痛 2020-12-12 21:22

A forum I frequent was down today, and upon restoration, I discovered that the last two days of forum posting had been rolled back completely.

Needless to say, I\'d

相关标签:
12条回答
  • 2020-12-12 21:36

    Try Chrome Cache View from NirSoft (free).

    0 讨论(0)
  • 2020-12-12 21:36

    Note: The flag show-saved-copy has been removed and the below answer will not work


    You can read cached files using Chrome alone.

    Chrome has a feature called Show Saved Copy Button:

    Show Saved Copy Button Mac, Windows, Linux, Chrome OS, Android

    When a page fails to load, if a stale copy of the page exists in the browser cache, a button will be presented to allow the user to load that stale copy. The primary enabling choice puts the button in the most salient position on the error page; the secondary enabling choice puts it secondary to the reload button. #show-saved-copy

    First disconnect from the Internet to make sure that browser doesn't overwrite cache entry. Then navigate to chrome://flags/#show-saved-copy and set flag value to Enable: Primary. After you restart browser Show Saved Copy Button will be enabled. Now insert cached file URI into browser's address bar and hit enter. Chrome will display There is no Internet connection page alongside with Show saved copy button:

    After you hit the button browser will display cached file.

    0 讨论(0)
  • 2020-12-12 21:39

    Note: The below answer is out of date since the Chrome disk cache format has changed.


    Joachim Metz provides some documentation of the Chrome cache file format with references to further information.

    For my use case, I only needed a list of cached URLs and their respective timestamps. I wrote a Python script to get these by parsing the data_* files under C:\Users\me\AppData\Local\Google\Chrome\User Data\Default\Cache\:

    import datetime
    with open('data_1', 'rb') as datafile:
        data = datafile.read()
    
    for ptr in range(len(data)):
        fourBytes = data[ptr : ptr + 4]
        if fourBytes == b'http':
    
            # Found the string 'http'. Hopefully this is a Cache Entry
            endUrl = data.index(b'\x00', ptr)
            urlBytes = data[ptr : endUrl]
            try:
                url = urlBytes.decode('utf-8')
            except:
                continue
    
            # Extract the corresponding timestamp
            try:
                timeBytes = data[ptr - 72 : ptr - 64]
                timeInt = int.from_bytes(timeBytes, byteorder='little')
                secondsSince1601 = timeInt / 1000000
                jan1601 = datetime.datetime(1601, 1, 1, 0, 0, 0)
                timeStamp = jan1601 + datetime.timedelta(seconds=secondsSince1601)
            except:
                continue
    
            print('{} {}'.format(str(timeStamp)[:19], url))
    
    0 讨论(0)
  • 2020-12-12 21:41

    The JPEXS Free Flash Decompiler has Java code to do this at in the source tree for both Chrome and Firefox (no support for Firefox's more recent cache2 though).

    0 讨论(0)
  • 2020-12-12 21:42

    EDIT: The below answer no longer works see here


    In Chrome or Opera, open a new tab and navigate to chrome://view-http-cache/

    Click on whichever file you want to view. You should then see a page with a bunch of text and numbers. Copy all the text on that page. Paste it in the text box below.

    Press "Go". The cached data will appear in the Results section below.

    0 讨论(0)
  • 2020-12-12 21:45

    I've made short stupid script which extracts JPG and PNG files:

    #!/usr/bin/php
    <?php
     $dir="/home/user/.cache/chromium/Default/Cache/";//Chrome or chromium cache folder. 
     $ppl="/home/user/Desktop/temporary/"; // Place for extracted files 
    
     $list=scandir($dir);
     foreach ($list as $filename)
     {
    
     if (is_file($dir.$filename))
        {
            $cont=file_get_contents($dir.$filename);
            if  (strstr($cont,'JFIF'))
            {
                echo ($filename."  JPEG \n");
                $start=(strpos($cont,"JFIF",0)-6);
                $end=strpos($cont,"HTTP/1.1 200 OK",0);
                $cont=substr($cont,$start,$end-6);
                $wholename=$ppl.$filename.".jpg";
                file_put_contents($wholename,$cont);
                echo("Saving :".$wholename." \n" );
    
    
                    }
            elseif  (strstr($cont,"\211PNG"))
            {
                echo ($filename."  PNG \n");
                $start=(strpos($cont,"PNG",0)-1);
                $end=strpos($cont,"HTTP/1.1 200 OK",0);
                $cont=substr($cont,$start,$end-1);
                $wholename=$ppl.$filename.".png";
                file_put_contents($wholename,$cont);
                echo("Saving :".$wholename." \n" );
    
    
                    }
            else
            {
                echo ($filename."  UNKNOWN \n");
            }
        }
     }
    ?>
    
    0 讨论(0)
提交回复
热议问题