2013-12-23 39 views
3

我想通過使用PhantomJS來實現一個解決方案,一個Web位置打開評估和輸出保存到文件進行處理。特別是掃描惡意腳本。我已經能夠使用PhantomJS運行一次來​​實施解決方案。例如,這完美的作品...Phantomjs進程間通信

var system = require('system'); 
var page = require('webpage').create(); 
var lastReceived = new Date().getTime(); 
var requestCount = 0; 
var responseCount = 0; 
var requestIds = []; 
var fileSystem = require('fs'); 
var startTime = new Date().getTime(); 

page.onResourceReceived = function (response) { 
    if(requestIds.indexOf(response.id) !== -1) { 
     lastReceived = new Date().getTime(); 
     responseCount++; 
     requestIds[requestIds.indexOf(response.id)] = null; 
    } 
}; 
page.onResourceRequested = function (request) { 
    if(requestIds.indexOf(request.id) === -1) { 
     requestIds.push(request.id); 
     requestCount++; 
    } 
}; 

page.open('http://adserver.example.com/adserve/;ID=164857;size=300x250;setID=162909;type=iframe', function() {}); 

var checkComplete = function() { 
    // We don't allow it to take longer than 5 seconds but 
    // don't return until all requests are finished 
    if((new Date().getTime() - lastReceived > 300 && requestCount === responseCount) || new Date().getTime() - startTime > 5000) { 
     clearInterval(checkCompleteInterval); 
     console.log(page.content); 
     phantom.exit(); 
    } 
} 

var checkCompleteInterval = setInterval(checkComplete, 1); 

不過,我有巨大的困難,努力創造和自動化系統,不需要PhantomJS不斷地重新啓動它有開銷公平一點。 我嘗試使用命名管道來讀取,然後嘗試打開傳遞的url,但由於某種原因它不能正常打開。我很樂意並且非常感謝任何有關這方面的指導。

回答

5

有件事要提的是,PhantomJS擅長HTTP通信。這就是爲什麼對於高級功能更好的性能,我總是使用資源池模式+ Web服務器模塊。這個模塊仍然被標記爲EXPERIMENTAL,但直到現在,我總是發現它非常穩定。

所以,我認爲最好的情況下,通過HTTP進行通信比通過文件IO更好。

這是一個非常簡單的例子:

var page = require('webpage').create(); 
var server = require('webserver').create(); 
var system = require('system'); 
var host, port; 

if (system.args.length !== 2) { 
    console.log('Usage: server.js <some port>'); 
    phantom.exit(1); 
} else { 
    port = system.args[1]; 
    var listening = server.listen(port, function (request, response) { 
     var page=require('webpage').create(); 
     page.open(request.post.target, function(status){ 
      response.write("Hello "+page.title); 
      response.close(); 
     }); 
    }); 
    if (!listening) { 
     console.log("could not create web server listening on port " + port); 
     phantom.exit(); 
    } 

    //test only 
    var url = "http://localhost:" + port + "/"; 
    console.log("SENDING REQUEST TO:"); 
    console.log(url); 
    var data='target=http://stackoverflow.com/'; 
    page.open(url,'post', data, function (status) { 
     if (status !== 'success') { 
      console.log('FAIL to load the address'); 
     } else { 
      console.log("GOT REPLY FROM SERVER:"); 
      console.log(page.content); 
     } 
     phantom.exit(); 
    }); 
} 
+0

這是解決問題的精闢外側入路! –