Gus*_*uss 10 java apache-commons-httpclient
我正在使用Jakarta Commons HttpClient 3.1编写一个负载测试工具,该工具需要针对不同的服务器,并假装它针对HTTP服务器中的正确虚拟主机.为此,我需要能够将请求中的"主机"HTTP标头设置为不同的主机名,然后是我要连接的实际主机名.
看起来很明显我应该使用Method.setRequestHeader("Host","fakehostname"),但HttpClient只是忽略了这一点,并且总是在"Host"标题中发送我正在连接的真实主机名(我已启用"httpclient.wire"的调试日志记录,我可以这样做具体而言).
如何覆盖标题以便HttpClient注意?
Gus*_*uss 15
在搜索了一些,并从Oleg的答案中得到了一个提示之后,我找到了方法HttpMethodParams :: setVirtualHost().
当HttpClient格式化请求时,它总是在发送请求之前自己创建"主机"标头 - 因此它不能被覆盖为标准标头.但是,在从URL生成"Host"标头的主机名之前,HttpClient会检查HttpMethodParams对象以查看用户是否要覆盖主机名.这只会覆盖主机名而不是端口,所以它更容易使用,虽然不像我想的那样直观.
使用它的代码可能如下所示:
Method m = new GetMethod("http://some-site/some/path");
m.getParams().setVirtualHost("some-other-site");
client.executeMethod(m);
Run Code Online (Sandbox Code Playgroud)
因为我喜欢一个衬垫,所以这也可以写成:
client.executeMethod(new GetMethod("http://some-site/some/path") {{
getParams().setVirtualHost("some-other-site"); }});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14826 次 |
| 最近记录: |