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 主机文件更改或主机头的主要内容,如果未能解决你的问题,请参考以下文章

服务器上必须保留空主机头,如何放置恶意域名指向呢?

有没有办法用 HTTPS 加密主机头?

nginx -实现同一主机IP地址多个加密主机头

Vue无效的主机头

在云主机中新建多个网站,网站的属性中TCP端口默认是:80,是否所有的都是80?还是每个站点都不一样?

linux服务器上设置多主机头,设置多web站点