【发布时间】:2014-04-03 21:28:22
【问题描述】:
我正在使用 httpclient 4.2.5 来发出必须处理重定向的 http 请求。 这是一个理解上下文的小例子:
- A 向 B 发送 http 请求(使用 httpclient 4.2.5)
- B 将 302 重定向(包含指向 C 的 URL)发送回 A
- A 跟随重定向到 C
- C 检索请求 URL 并对其进行处理
如果 C 通过 request.getRequestURL() (HttpServlet API) 解析请求 URL,它包含例如步骤 1 中原始请求的主机和端口,这是错误的。
问题存在于第 2 步,其中 httpclient 处理重定向。它只是将所有标头从原始请求(步骤 1)复制到当前请求(步骤 3)。我已经通过 grepcode 查看了负责的代码:
DefaultRequestDirector
HttpUriRequest redirect = redirectStrategy.getRedirect(request, response, context);
HttpRequest orig = request.getOriginal();
redirect.setHeaders(orig.getAllHeaders());
我不太明白为什么将原始请求的所有标头都复制到当前请求中。
例如。使用 cURL 进行简单测试按预期进行,C 将收到正确的主机和端口。
实施我自己的重定向策略并没有帮助,因为在它之后复制了原始标头。
【问题讨论】:
标签: java apache-httpclient-4.x