2015-05-13 7 views

risposta

6

Si può fare qualcosa di simile:

var page = require('webpage').create(), 
    system = require('system'), 
    resources = []; 

page.open('http://google.com', function (status) { 
    console.log('Loaded with http status:', resources[0].status); 
    phantom.exit(); 
}); 

page.onResourceReceived = function(response) { 
    // check if the resource is done downloading 
    if (response.stage !== "end") return; 
    // apply resource filter if needed: 
    if (response.headers.filter(function(header) { 
     if (header.name == 'Content-Type' && header.value.indexOf('text/html') == 0) { 
      return true; 
     } 
     return false; 
    }).length > 0) 
     resources.push(response); 
}; 

Quindi, se avete bisogno di controllare lo stato della richiesta del primo navigatore (in questo caso pagina html di Google) si dovrebbe vedere come il primo quello restituito in resources[0].status. Nel gestore onResourceReceived è possibile aggiungere altri filtri per le risorse da cui si tenta di ottenere il codice http.

UPDATE: grazie alla @fotijr, ha aggiunto un assegno per le risposte completate

+1

Tecnica eccellente. Un'altra condizione che potresti voler usare è controllare il palco. 'if (response.stage! ==" end ") return;' uscirà dalla funzione se la risorsa non è stata scaricata. Ciò impedirà la doppia elaborazione poiché c'è un evento "start" e "end" per ogni download. – fotijr

+1

@fotijr giusto! Grazie! Aggiornerò lo snippet ora –

+0

Semplicemente facendo un ringraziamento per una grande risposta! È contro le regole apparentemente ma è una risposta grande e precisa – Seer

0

In

page.property('onResourceError', function(res) { 

variabile risorse non è definito,

anche se ho impostato con

var page = require('webpage').create(), 
system = require('system'), 
resources = [];