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

问题描述 投票:3回答:1

我有一个在端口9091上运行的browsermob代理。我试图使用browsermob-proxy REST API设置自定义标头。当我通过代理使用Selenium向我的应用程序发出请求时,我的应用程序控制台中没有显示标题。下面是我的代码。请求正文基于文档here。我的要求是针对此特定用例使用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。因此,我唯一需要做的代码更改就是初始化代理的方式,其余的都是相同的。现在可以正常工作。

 String PROXY = "localhost:9091";
 Proxy proxy = new Proxy();
 proxy.setHttpProxy(PROXY);
java selenium proxy webdriver browsermob
1个回答
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
投票

您能否共享Client,WebResource和MediaType的导入语句。

谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.