javascript - 来自 phantomjs 网络监控结果的缺失请求

标签 javascript ssl https phantomjs network-monitoring

我有一个使用 AngularJS 构建的 Web 应用程序。 我正在使用 phantomjs 网络监控来嗅探页面加载时从网站触发的所有请求。我得到以下请求列表:

 "https:.../assets/application-bf61473a35661d960c262995b314b0af.css" 
 "https:.../assets/lib/modernizr-c569e351684c78953f5f6298b4e1e485.js" 
 "https:.../assets/application-04936fc61dbebda777c3f816afa39726.js" 
 "https://www.google-analytics.com/analytics.js" 
 "https://ssl.google-analytics.com/ga.js"  
 "https:.../assets/app_install_page_header-a4b182016c1769bad626d1409b6c95f1.png"
 "https:.../assets/app_install_page_landing_text-14a162dca43a9a84b9fe0a7a77472fad.png"

问题是该列表不包含任何动态请求,例如:

我使用了一个 waitFor 方法来给 phantomjs 时间来等待延迟的请求,但它没有帮助。

我使用了这个文档 http://phantomjs.org/network-monitoring.html .

代码:

var page = require('webpage').create();

page.onConsoleMessage = function(msg, lineNum, sourceId) {
    console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
};

page.onError = function(msg, trace) {
    var msgStack = ['ERROR: ' + msg + trace];
    console.error(msgStack.join('\n'));
};

page.onResourceRequested = function(request) {
    url = request.url
    console.log(url);
};

page.onRecourseReceived = function(response) {
    console.log('received: ' + JSON.stringify(response, undefined, 4));
};

page.onLoadFinished = function() {
    page.render("on_finish.png");
};

page.open(address, function(status){

    setTimeout(function(){
        phantom.exit();
    }, 15000);
});

最佳答案

您似乎有一个本身使用 https 分析的 http 站点。
最近,POODLE 漏洞迫使网站所有者禁用 SSLv3。由于 PhantomJS < v1.9.8 默认使用 SSLv3,因此由于握手失败无法加载分析和其他脚本。因此,随后的请求无法运行,因为脚本甚至没有到达浏览器。

从 PhantomJS 1.9.8 开始,默认协议(protocol)设置为 TLSv1,但它可以通过将 --ssl-protocol=tlsv1 作为命令行选项传递给早期版本来手动设置。参见 this answer了解更多。

这可以通过注册 onResourceError 来检查事件处理程序。错误消息将包含类似 SSL handshake failed 的内容。

关于javascript - 来自 phantomjs 网络监控结果的缺失请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26609498/

相关文章:

javascript - 如何使用 Meteor Spacebars {{#each}} block 迭代字符串数组?

javascript - 显示不占空间

ssl - GKE Ingress 如何使用 Letsencrypt 证书?

web-services - 在 Azure Web 服务 (API) 上强制执行 HTTPS 重定向

java版本 "1.7.0_171"支持密码套件TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

android - 使用Picasso加载图片时出现错误504

javascript - 用 mysql 结果创建一个 foreach

javascript - 如何使用 jQuery 在用户选择的文本行中的 &lt;textarea&gt; 末尾添加图像

java - 如何在服务器上添加多个信任源

node.js - 无法验证第一个证书; NodeJs 与 Python 请求