使用BrowserMob-Proxy REST api设置自定义标头

我有一个在端口9091上运行的browsermob代理。我正在尝试使用browsermob-proxy REST API来设置自定义标头。 当我通过代理使用Selenium向我的应用程序发出请求时,我看不到我的应用程序控制台中打印的标题。 以下是我的代码。 请求正文基于此处的文档。 我的要求是使用BrowserMob代理API而不是它的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

我试过@ Erki的解决方案,我觉得应该可行,但事实并非如此。 这里有什么遗漏?

  String bpmUrl = "http://localhost:8787/proxy/9091/headers"; Map data = new HashMap(); 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); 

您正在使用与嵌入模式下使用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编码的)