当前位置: 首页 > 面试题库 >

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

终子昂
2023-03-14
问题内容

我有一个运行在端口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,而是使用了它。因此,我唯一需要进行的代码更改就是初始化代理的方式,其余部分相同。现在工作正常。

 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 / [端口] /标头-
设置和覆盖HTTP请求标头。例如,设置自定义用户代理。有效载荷数据应为JSON编码的标头集(未经url编码)



 类似资料:
  • 问题内容: 我正在尝试使用Axis使用.NET 2.0 Web服务。我使用Eclipse WST插件生成了Web服务客户端,到目前为止看来还可以。 这里是预期的SOAP标头: 我没有找到有关如何从Axis客户端配置此标头的任何文档。当我使用Visual Studio C#Express 2008生成客户端时,它会生成一个具有两个String属性(和)的类,并且所有客户端方法都将此类的对象作为第一个

  • 我正在尝试将browsermob设置为在我的selenium项目中工作。我正在寻找一种使用ChromeOptions来设置代理的方法,但是所有的资源都告诉我要使用ChromeOptions来处理其他的事情,然后在实例化一个新的ChromeDriver实例之前将它转换为DesiredCapabilities。 这是我的代码: 我使用的是maven存储库中的Webdriver版本2.44。这是我得到的

  • 问题内容: 使用$ http,我们可以这样做: 我想用$ resource引用做同样的事情(不起作用): 与这样声明的相应服务: 它不起作用:config对象转到url而不是http标头。 有没有办法做到这一点 ? 问题答案: 对于是因为AngularJS 1.1.1可用。确保您使用了正确的版本。 格式为 [以上内容似乎不正确。$ resource的第三个参数应该不同。这对我来说似乎更正确:

  • 问题内容: 使用Spring-WS时,如何在客户端动态设置自定义HTTP标头(不是SOAP标头)? 问题答案: 配置:

  • 介绍: 现在基于css font-face的字体图标越来越流行。 这种图标具有矢量图的特点,可以不失真的自由缩放,还可以通过css来设置图标的颜色,还有就是网络上资源特别丰富。X5系统自带了数百个字体图标, 用户还可以通过配置使用自己下载的字体图标, 下边就介绍一下具体的使用方法。 首先以fortawesome 网站为例(网址:http://fortawesome.github.io/Font-A