【问题标题】:Setting a custom header using BrowserMob-Proxy REST api使用 BrowserMob-Proxy REST api 设置自定义标头
【发布时间】:2014-08-31 18:28:31
【问题描述】:

我有一个在端口 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】:

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

    【讨论】:

    • +1,我认为你是对的。我尝试了您上面提到的 POST,但它仍然无法正常工作。我更新了我的尝试。谢谢!
    猜你喜欢
    • 2017-08-13
    • 1970-01-01
    • 2020-02-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 2015-06-06
    相关资源
    最近更新 更多