# Browser Mob Proxy

Ранее мы уже упоминали этот инструмент, но сейчас нас интересует его возможность собирать данные о производительности. Browser Mob Proxy может собирать данные о производительности и сохранять их в формате HAR.

HAR - это архив, содержащий данные о навигации по world wide web (или AUT), в том числе и данные о клиентской производительности, в формате JSON определенной структуры.

Сохраняются данные следующим образом:

```
import net.lightbody.bmp.core.har.Har;
import net.lightbody.bmp.proxy.ProxyServer;

import org.junit.Test;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

public class SimpleTest {

    @Test
    public void bmpTest() throws Exception {
        // запуск прокси сервера
        ProxyServer server = new ProxyServer(4444);
        server.autoBasicAuthorization("example.com", "username", "password");
        server.start();

        // получение Selenium proxy
        Proxy proxy = server.seleniumProxy();

        // конфигурация FirefoxDriver для использования прокси
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(CapabilityType.PROXY, proxy);

        WebDriver driver = new FirefoxDriver(capabilities);

        // создание HAR с меткой
        server.newHar("mypage.ru");

        // открытие страницы
        driver.get("http://example.com/index");

        // получение данных HAR
        Har har = server.getHar();

        // здесь будет обработка полученных данных
        // например, сохранение файл
        proxy.getHar().writeTo(new File("D://Test.har"));

        driver.quit();
        server.stop();
    }
}
```

Полученный HAR файл содержит JSON данные, которые можно использовать как текстовую информацию, либо просмотреть в удобном представлении, используя один из существующих инструментов для визуализации (HAR viewer). Например, по адресу <http://www.softwareishard.com/har/viewer/>

Получить информацию можно и без сохранения HAR файла. Java класс `net.lightbody.bmp.core.har.HarLog` предоставляет набор методов для выборочного получения нужной информации:

```
Har har = proxy.getHar();

// получить информацию о браузере
System.out.println(har.getLog().getBrowser().getName());
System.out.println(har.getLog().getBrowser().getVersion());

// список всех обработанных запросов
for (HarEntry entry : har.getLog().getEntries()) {

    System.out.println(entry.getRequest().getUrl());
    // время ожидания ответа от сервера в миллисекундах
    System.out.println(entry.getTimings().getWait());
    // время чтения ответа от сервера в миллисекундах
    System.out.println(entry.getTimings().getReceive());
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://comaqa.gitbook.io/selenium-webdriver-lectures/selenium-webdriver.-testirovanie-klientskoi-proizvoditelnosti/browser-mob-proxy.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
