这个问题与从 Commons HttpClient 迁移到 HttpComponents Client(从 HttpClient 3 迁移到 HttpClient 4)有关。
我可以在浏览器中物理访问链接,但是当我尝试使用 HttpClient 4.1.13 访问相同的链接时,我收到 HTTP 错误 301(“永久移动”)。
使用 HttpClient 3.1 访问同一链接时,我没有收到 HTTP 错误 301。
什么可能导致这种异常?可能是我在 HC 4 下缺少的设置使其表现得那样吗?
这个问题与从 Commons HttpClient 迁移到 HttpComponents Client(从 HttpClient 3 迁移到 HttpClient 4)有关。
我可以在浏览器中物理访问链接,但是当我尝试使用 HttpClient 4.1.13 访问相同的链接时,我收到 HTTP 错误 301(“永久移动”)。
使用 HttpClient 3.1 访问同一链接时,我没有收到 HTTP 错误 301。
什么可能导致这种异常?可能是我在 HC 4 下缺少的设置使其表现得那样吗?
这可能会发生,因为源服务器对具有不同标头的请求的响应不同User-Agent
。
首先,301 不是“错误”。3xx 响应是“重定向”响应。4xx 和 5xx 是错误系列。
针对您的问题,根据 RFC 2616,如果请求方法不是 GET 或 HEAD,用户代理可能不会自动处理重定向。我猜你正在做一个POST。HttpClient 4 在遵守 HTTP 规范方面比它的前身更严格,而且它在这一点上绝对符合规范,所以这可能就是你看到这个问题的原因。
如果您使用的是 HC 4.x HttpClient 服务,它应该会自动处理重定向。至少,这就是文档所说的。(我注意到有一些配置属性,但文档说默认情况下启用自动重定向处理。)