是否可以从加载时间为> = 1 sec的har过滤请求/响应?我需要将HAR对象保存到单独的文件中,然后上传到HAR Viewer中。以下是我生成.har文件的代码。
//BrowserMobProxy
BrowserMobProxy server = new BrowserMobProxyServer();
server.start(0);
server.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes());
server.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
server.newHar("Bhaskar");
//PHANTOMJS_CLI_ARGS
ArrayList<String> cliArgsCap = new ArrayList<>();
cliArgsCap.add("--proxy=localhost:"+server.getPort());
cliArgsCap.add("--ignore-ssl-errors=yes");
//DesiredCapabilities
String userAgent = "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Mobile Safari/537.36";
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
capabilities.setCapability(CapabilityType.SUPPORTS_JAVASCRIPT, true);
capabilities.setCapability("phantomjs.page.settings.userAgent", userAgent);
capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap);
capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,"D:/req/phantomjs-2.1.1-windows/bin/phantomjs.exe");
//WebDriver
WebDriver driver = new PhantomJSDriver(capabilities);
driver.get("https://www.google.com");
//HAR
Har har = server.getHar();
FileOutputStream fos = new FileOutputStream("D:\HAR-Information.har");
har.writeTo(fos);
server.stop();
driver.close();
您是否注意到har中的"时机"块?
此对象描述了请求响应往返中的各个阶段。所有时间均以毫秒为单位。
"timings": {
"blocked": 0,
"dns": -1,
"connect": 15,
"send": 20,
"wait": 38,
"receive": 12,
"ssl": -1,
"comment": ""
}
阻止[数字,可选] - 在队列中花费的时间等待网络连接。如果计时不适用于当前请求。
dns [数字,可选] -DNS分辨率时间。需要的时间解决主机名。如果计时不适用于当前请求。
连接[数字,可选] - 创建TCP连接所需的时间。如果计时不适用于当前请求,请使用-1。
发送[号码] - 将HTTP请求发送到服务器所需的时间。
等待[数字] - 等待服务器的响应。收到[编号] - 读取服务器的整个响应所需的时间(或缓存)。
ssl [数字,可选](1.2中的新) - SSL/TLS所需的时间谈判。如果定义了此字段,则还包括时间在连接字段中(确保与HAR 1.1的向后兼容)。如果计时不适用于当前请求,请使用-1。
注释[字符串,可选](1.2中的新) - 用户或应用程序。
发送,等待和接收时间不是可选的,必须具有非负值。
导出工具可以省略已阻止的DNS,Connect和SSL,如果无法提供每个请求的时间。可以提供这些时间的工具,如果不应用它们,则可以将其值设置为-1。例如,对于重复使用现有连接的请求,连接将为-1。
请求的时间值必须等于本节中提供的时间的总和(不包括任何-1个值)。
以下如果没有-1值(输入是log.entries中的对象):
entry.time == entry.timings.blocked entry.timings.dns entry.timings.connect entry.timings.send entry.timings.wait entry.timings.receive;
拥有完整的HAR对象后,您可以在HAR上迭代并计算每个元素的总项目,并删除那些时间> 1000ms的人。然后,您可以将HAR对象保存到文件中。