使用HttpClient 4.x时避免HTTP错误301

时间:2012-05-05 22:51:11

标签: java apache-commons-httpclient apache-httpclient-4.x

此问题与Migrate from Commons HttpClient to HttpComponents Client(从HttpClient 3迁移到HttpClient 4)有关。

我可以在浏览器中物理访问链接,但是当我尝试使用HttpClient 4.1.13访问同一链接时,我收到HTTP错误301(“永久移动”)。

使用HttpClient 3.1访问同一链接时,我没有收到HTTP错误301。

可能导致这种异常情况的原因是什么?这可能是我在HC 4下失踪的设置,使其表现如此吗?

3 个答案:

答案 0 :(得分:2)

这可能会发生,因为原始服务器对具有不同User-Agent标头的请求的响应不同。

答案 1 :(得分:1)

首先,301不是“错误”。 3xx回复是"redirection" responses。 4xx和5xx是错误系列。

根据您的问题,根据RFC 2616,用户代理may not automatically handle redirects if the request method isn't GET or HEAD。我猜你在做POST。 HttpClient 4在遵守HTTP规范方面比它的前身更严格,它绝对符合这一点的规范,所以这可能就是你看到这个问题的原因。

答案 2 :(得分:0)

如果您使用的是HC 4.x HttpClient service,它应该自动处理重定向。至少,这就是文档所说的。 (我注意到有一些配置属性,但文档说明默认启用了自动重定向处理。)