【发布时间】:2019-12-15 07:30:49
【问题描述】:
我使用 BrowserUp (https://github.com/browserup/browserup-proxy) 代理跟踪我的 HTTP 请求并从服务器获取一个 HAR 对象。遗憾的是 BrowserUp 不包含将此对象写入文件的方法,这就是我使用与 BrowserMob 相同的方法的原因。问题是:从中出来的文件,似乎没有正确格式化(Gatling 在索引 23 处抛出时间格式异常,如果我将其转换为 jmx jmeter 表示它不包含 http 请求)
我的代码:
// Start the BrowserMob proxy
BrowserUpProxy server = new BrowserUpProxyServer();
server.setHarCaptureTypes(CaptureType.REQUEST_CONTENT);
NativeResolver resolver = new NativeResolver();
resolver.getHostRemappings();
System.out.println("resolver:" + resolver);
server.setHostNameResolver(resolver);
server.start();
server.newHar();
// Get selenium proxy
Proxy proxy = ClientUtil.createSeleniumProxy(server);
GeckoDriverService geckoservice = new GeckoDriverService.Builder()
.usingDriverExecutable(new File("C:/ProgrammeZwei/geckodriver.exe")).usingAnyFreePort()
.usingAnyFreePort().build();
try {
geckoservice.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Configure desired capability for using proxy server with WebDriver
FirefoxOptions options = new FirefoxOptions();
options.setProxy(proxy);
options.addPreference("network.proxy.allow_hijacking_localhost", true);
// Set up driver
WebDriver driver = new FirefoxDriver(geckoservice, options);
driver.get("https://www.google.com");
Har har = server.getHar();
List<HarEntry> entries = server.getHar().getLog().getEntries();
for (HarEntry entry : entries) {
Date date = entry.getStartedDateTime();
System.out.println("startedtime:" + date.toString() + " request:" + entry.getRequest().getMethod() + ":"
+ entry.getRequest().getUrl());
}
String pfad = System.getProperty("user.dir") + File.separator + System.currentTimeMillis() + "MiniTest.har";
File harFile = new File(pfad);
ObjectMapper mapper = new ObjectMapper();
try {
mapper.writeValue(harFile, har.getLog());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Close the browser
driver.quit();
控制台输出的sn-p:
startedtime:Wed Aug 07 17:46:26 CEST 2019 request:GET:https://www.google.com/
startedtime:Wed Aug 07 17:46:26 CEST 2019 request:GET:https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png
startedtime:Wed Aug 07 17:46:26 CEST 2019 request:GET:https://www.google.com/gen_204?atyp=i&ct=rfl&cad=&ei=UvJKXYvRDY3awALA4qDYCg&zx=1565192786421
startedtime:Wed Aug 07 17:46:26 CEST 2019 request:GET:https://www.google.com/gen_204?atyp=i&ct=rfl&cad=&ei=UvJKXYvRDY3awALA4qDYCg&zx=1565192786442
所以我猜所有数据都正确收集在 har 对象中。 您知道如何将其写入文件吗?
【问题讨论】:
-
在以前版本的 BrowserUp 代理中,我们有几个错误,输出在某些小方面违反了 har 规范,例如将字符串放在预期为 int 的位置——诸如此类。 BrowserMob 也有它们。如果这不是您所拥有的,您可以尝试最新版本吗?另外,请随时在此处请求一种将 har 写入文件的方法:github.com/browserup/browserup-proxy/issues。我们有一个合适的路线图,所以它可能不是立竿见影的,但它似乎是一个合理的要求。
-
如果时间格式与规范不匹配,请随时将其报告为问题,尽管我们在清理最后一个问题时确实审查了规范,所以希望如此。
-
我请求了增强功能,并建议通过使用一些 json 注释对 har 类进行注释来快速修复。也许这样修复可能会更快:)
-
我正在使用浏览器向上代理。但是得到空的HAR。可能是什么原因。我已经使用了浏览器上代理github页面上提供的代码
标签: java gatling browsermob-proxy har