gpt4 book ai didi

java - 使用 Apache commons HttpClient 时如何覆盖请求中的 "Host" header

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:06:29 27 4
gpt4 key购买 nike

我正在使用 Jakarta Commons HttpClient 3.1 编写一个负载测试工具,该工具需要针对不同的服务器并假装它针对 HTTP 服务器中的正确虚拟主机。为此,我需要能够将请求中的“主机”HTTP header 设置为与我要连接的实际主机名不同的主机名。

我应该使用 Method.setRequestHeader("Host","fakehostname") 似乎很明显,但是 HttpClient 只是忽略了这一点并且总是发送我正在连接的真实主机名“主机” header (我已经为“httpclient.wire”启用了调试日志记录,我可以专门这样做)。

我如何覆盖 header 以便 HttpClient 注意到?

最佳答案

在进一步搜索并从 Oleg 的回答中得到提示后,我找到了方法 HttpMethodParams::setVirtualHost() .

当 HttpClient 格式化请求时,它总是在发送请求之前自行创建“Host” header - 因此它不能被覆盖为标准 header 。但在从 URL 生成“主机” header 的主机名之前,HttpClient 检查 HttpMethodParams 对象以查看用户是否想要覆盖主机名。这只会覆盖主机名而不是端口,因此使用起来会更容易,尽管不如我想要的那么直观。

使用它的代码如下所示:

Method m = new GetMethod("http://some-site/some/path");
m.getParams().setVirtualHost("some-other-site");
client.executeMethod(m);

因为我喜欢单行本,所以这也可以写成:

client.executeMethod(new GetMethod("http://some-site/some/path") {{
getParams().setVirtualHost("some-other-site"); }});

关于java - 使用 Apache commons HttpClient 时如何覆盖请求中的 "Host" header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6045911/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com