PhantomJS 主机文件更改或主机头

Posted

技术标签:

【中文标题】PhantomJS 主机文件更改或主机头【英文标题】:PhantomJS hostfile change or host header 【发布时间】:2016-04-16 04:50:42 【问题描述】:

我想编写 PhantomJS 脚本,允许在网站的 localhost 版本和生产版本上进行测试(localhost 需要解析主机名,不能在 ip 地址上工作)。该脚本基本上只是比较两个版本:加载本地版本,渲染到图像,加载生产版本,渲染到图像并比较这两个版本。我现在正在做的是使用需要大量修改和保存主机文件的主机文件(不是很好的解决方案,因为它会影响其他人并且有时它会被缓存)

还有另一种方法是使用主机头,例如:

产品:http://example.com

本地:http://127.0.01/ 与主机:example.com

与hostfile结果相同,更安全。问题是只有主 html 加载了本地版本、资源、css,图像静态是使用 127.0.0.1 加载的,无法解决....

我的问题是:如何告诉 PhantomJS 对所有请求使用主机标头?

【问题讨论】:

【参考方案1】:

我找到了答案:D,通过拦截resourceRequest事件,我们可以改变资源的url或header。

var targetHost=  'example.com'; 
var targetIP = '127.0.0.1'; 
var page = require('webpage').create(); 
page.onResourceRequested = function(request, network)   //Intercept request here, change url,header.   
  var newUrl = request.url.replace(targetHost, targetIP);  
  console.log('Intercepted change url to ', newUrl, targetHost);  
  network.setHeader('Host', targetHost); 
  network.changeUrl(newUrl); 
;
page.open(url, function() );

【讨论】:

以上是关于PhantomJS 主机文件更改或主机头的主要内容,如果未能解决你的问题,请参考以下文章