我有一个在端口 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<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
which 工作。所以我需要的唯一代码更改是我初始化代理的方式,其余部分是相同的。这现在工作正常。
String PROXY = "localhost:9091";
Proxy proxy = new Proxy();
proxy.setHttpProxy(PROXY);