2014-08-31 3 views
3

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

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(); 

Edit 1

Я пытался @ решения ERKI, которые я думаю, что должно работать, но это не так. Что-то здесь отсутствует?

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); 

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

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

ответ

3

Вы используете код, который соответствует использованию 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-запросов. Например, настраивая пользовательский агент. Данные полезной нагрузки должны быть json закодированный набор заголовков (не в кодировке url)

+0

+1, я думаю, что вы правы. Я попробовал POST, упомянутый выше, но он все еще не работает. Я обновил мою попытку. Благодаря! – nilesh

Смежные вопросы