Настройка пользовательского заголовка с помощью 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)