Настройка пользовательского заголовка с помощью BrowserMob-Proxy REST API

У меня есть прокси-сервер browsermob, работающий на порту 9091. Я пытаюсь использовать REST API browsermob-proxy для установки пользовательского заголовка. Когда я делаю запрос к своему приложению, используя Selenium через прокси-сервер, я не вижу заголовок, напечатанный в консоли моих приложений. Ниже мой код. Тело запроса основано на документации здесь. Мое требование - использовать прокси-API BrowserMob, а не его библиотеку Java для этого конкретного случая использования. Что-то я делаю не так в коде ниже?

 Proxy proxy = new java.net.Proxy(java.net.Proxy.Type.HTTP, new InetSocketAddress("localhost", 9091));

 String bpmUrl = "http://localhost:8787/proxy/9091/interceptor/request";
 Client client = Client.create();
 String requestBody = "request.getMethod().addHeader(\"custom-header\", \"Bananabot/1.0\");";
 WebResource resource = client.resource(bpmUrl);
 resource.type(MediaType.TEXT_PLAIN_TYPE).post(requestBody);

 String url = "http://localhost:8004";
 DesiredCapabilities capabilities = DesiredCapabilities.firefox();
 capabilities.setCapability(CapabilityType.PROXY, proxy);
 WebDriver driver = new FirefoxDriver(capabilities);
 driver.get(url);
 driver.quit();

Редактировать 1

Я попробовал решение @ Эрки, которое, я думаю, должно работать, но это не так. Здесь чего-нибудь не хватает?

 String bpmUrl = "http://localhost:8787/proxy/9091/headers";
     Map<String,String> data = new HashMap<String, String>();
     data.put("user-agent","Bananabot");
     ClientConfig cc = new DefaultClientConfig();
     cc.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
     Client client = Client.create(cc);
     WebResource resource = client.resource(bpmUrl);
     resource.type(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, data);

Редактировать 2 Нашел ответ, я попробовал Java API, он работал и заметил, что браузер использует прокси, как и ожидалось. С моим кодом выше, очевидно, браузер не использовал прокси. Так что вместо использования java.net.Proxy я использовал org.openqa.selenium.Proxy который работал. Таким образом, единственное изменение кода, в котором я нуждался, было способом, которым я инициализировал прокси, остальное это то же самое. Теперь это работает нормально.

 String PROXY = "localhost:9091";
 Proxy proxy = new Proxy();
 proxy.setHttpProxy(PROXY);

1 ответ

Решение

Вы используете код, который соответствует использованию BMP во встроенном режиме:

server.addRequestInterceptor(new RequestInterceptor() {
    @Override
    public void process(BrowserMobHttpRequest request, Har har) {
        request.getMethod().removeHeaders("User-Agent");
        request.getMethod().addHeader("User-Agent", "Bananabot/1.0");
    }
});

Этот код подойдет, если вы фактически запустили прокси-сервер во встроенном режиме, что, насколько я понимаю, не то, что вы сделали или намеревались сделать. Что вам нужно, вероятно:

POST / proxy / [port] / headers - Установить и переопределить заголовки HTTP-запроса. Например, установка пользовательского User-Agent. Данные полезной нагрузки должны быть набором заголовков в кодировке json (не в кодировке url)

Другие вопросы по тегам