![]() |
Aba Rede ou Net Firebug |
Ela lista todos os arquivos e seus respectivos tempos de download. Existem várias opções para listar somente imagens, arquivos de script ou css.
Pouco tempo atrás eu precisei obter os dados desta aba. Eu tinha feito download de um jogo feito usando-se html5, e usando-se a opção "Arquivo->Salvar como" do browser muitos dos arquivos de imagens não foram obtidos, já que eles não são referenciados em tags img ou no css. Eu queria uma forma de exportar esta lista de arquivos para que eu pudesse usá-la em um script que me permitisse fazer o download dos arquivos não encontrados, ou seja os arquivos que o servidor reportou com erro 404 quando tentei rodar o jogo localmente em meu computador. Para o problema de exportar esta lista de arquivos da aba Rede já existe um plugin (um plugin para um plugin?!) que faz isso. Ele se chama NetExport. Depois de instalar o NetExport, na aba rede vai aparecer uma opção chamada Export, depois de clicar nesta opção é só clicar na opção "Save as...". No local indicado será criado um arquivo com a extensão .har. Se você abrir este arquivo poderá ver que o conteúdo dele está no formato json.
Quando o conteúdo de um arquivo está no formato json, torna-se muito fácil ler tudo usando-se a função json_decode. Abaixo uma listagem do código que usei para a tarefa.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$net_data_file = file_get_contents('netData.har'); | |
$data = json_decode($net_data_file); | |
//var_dump(basename($data->log->entries[0]->request->url)); | |
//var_dump($data->log->entries); | |
$url_prefix = 'http://www.site-name.com/'; | |
$entries = $data->log->entries; | |
$downloaded = array(); | |
foreach($entries as $entry) { | |
if ($entry->response->status != '404') { | |
continue; | |
} | |
$file_name = basename($entry->request->url); | |
$url = $url_prefix . $file_name;//url could be $entry->request->url directly | |
sleep(1); | |
$content = @file_get_contents($url); | |
while($content === FALSE) { | |
sleep(1);//sleep for one second we don't want to overload the server with requests | |
$content = @file_get_contents($url); | |
} | |
//the b, in the 'wb' bellow, is for binary, important when writing differente types of files | |
$new_file = fopen("./files/$file_name", 'wb'); | |
fwrite($new_file, $content); | |
fclose($new_file); | |
echo "File $file_name downloaded.\n"; | |
} | |
exit(0); |
Dependendo do seu caso você precisará mudar um pouco o código. Na listagem a url poderia ser "$entry->request->url" diretamente em muitos casos sem a necessidade de usar basename.
Bom espero que o post seja útil para alguém, até mais!