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

Java 使用HttpClient 4.x时避免HTTP错误301,java,apache-commons-httpclient,apache-httpclient-4.x,Java,Apache Commons Httpclient,Apache Httpclient 4.x,这个问题涉及(从HttpClient 3迁移到HttpClient 4) 我可以在浏览器中物理访问链接,但当我尝试使用HttpClient 4.1.13访问同一链接时,会出现HTTP错误301(“永久移动”) 当使用HttpClient 3.1访问同一链接时,我没有收到HTTP错误301 是什么导致了如此反常?这可能是我在HC 4中缺少的一个设置,使它以这种方式运行吗?如果您使用的是HC 4.x,它应该自动处理重定向。至少,文件上是这么说的。(我注意到有一些配置属性,但文档中说默认情况下启用了自

这个问题涉及(从HttpClient 3迁移到HttpClient 4)

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

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


是什么导致了如此反常?这可能是我在HC 4中缺少的一个设置,使它以这种方式运行吗?

如果您使用的是HC 4.x,它应该自动处理重定向。至少,文件上是这么说的。(我注意到有一些配置属性,但文档中说默认情况下启用了自动重定向处理。)

如果您使用的是HC 4.x,它应该自动处理重定向。至少,文件上是这么说的。(我注意到有一些配置属性,但文档中说默认情况下启用了自动重定向处理。)

首先,301不是“错误”。3xx响应为。4xx和5xx是错误序列

根据RFC 2616,为回答您的问题,请提供一个用户代理。我猜你在发帖子。HttpClient 4在遵守HTTP规范方面比其前身更严格,而且在这一点上它肯定遵守规范,所以这可能就是您看到这个问题的原因。

首先,301不是一个“错误”。3xx响应为。4xx和5xx是错误序列


根据RFC 2616,为回答您的问题,请提供一个用户代理。我猜你在发帖子。HttpClient 4在遵守HTTP规范方面比其前身更严格,而且在这一点上它肯定遵守规范,因此这可能就是您看到此问题的原因。

这可能是因为源服务器使用不同的
用户代理
标头以不同的方式响应请求。

这种情况可能发生,因为源服务器对使用不同
用户代理
标头的请求的响应不同。

首先,我需要自己更正。我的意思是HTTP响应,但写了HTTP错误。因此,问题在于避免在链接可访问的情况下使用HTTP 301响应。其次,我使用的是GET而不是POST。重定向处理非常简单。如果您只是调试它,并在的handleResponse方法的开始处中断,您将能够确切地看到它不遵循重定向的原因。实际上,我不希望重定向。我只是想知道为什么重定向?我可以访问相同的链接物理(在浏览器中)和使用HC 3。为什么我要在HC4下获得HTTP 301?很可能是因为HC3和浏览器自动遵循重定向。如果要监视实际的网络流量,您会看到第一个请求得到301,第二个请求自动发出。如果这不是真的,那么还有其他事情在发生,你需要检查不同的请求和响应,看看你是否能找出造成差异的原因。1我需要纠正我自己。我的意思是HTTP响应,但写了HTTP错误。因此,问题在于避免在链接可访问的情况下使用HTTP 301响应。其次,我使用的是GET而不是POST。重定向处理非常简单。如果您只是调试它,并在的handleResponse方法的开始处中断,您将能够确切地看到它不遵循重定向的原因。实际上,我不希望重定向。我只是想知道为什么重定向?我可以访问相同的链接物理(在浏览器中)和使用HC 3。为什么我要在HC4下获得HTTP 301?很可能是因为HC3和浏览器自动遵循重定向。如果要监视实际的网络流量,您会看到第一个请求得到301,第二个请求自动发出。如果这不是真的,那么其他的事情正在发生,你需要检查不同的请求和响应,看看你是否能找出造成差异的原因。这可能是一个可能的原因。如何更改HC 4中的用户代理标头,以便不获得301响应?类似于使HC4中的用户代理与HC3(或普通浏览器)中的用户代理相同。我尝试了context.setAttribute(CoreProtocolPNames.USER_代理,“Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.0)”),但没有帮助。DefaultHttpClient httpclient=new DefaultHttpClient();httpclient.getParams().setParameter(AllClientPNames.USER_AGENT,“任意”);httpClient.getParams().setParameter(AllClientPNames.USER_代理,“Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.0)”)。这确实很神奇。非常感谢。这可能是一个可能的原因。如何更改HC 4中的用户代理标头,以便不获得301响应?类似于使HC4中的用户代理与HC3(或普通浏览器)中的用户代理相同。我尝试了context.setAttribute(CoreProtocolPNames.USER_代理,“Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.0)”),但没有帮助。DefaultHttpClient httpclient=new DefaultHttpClient();httpclient.getParams().setParameter(AllClientPNames.USER_AGENT,“任意”);httpClient.getParams().setParameter(AllClientPNames.USER_代理,“Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.0)”)。这确实很神奇。非常感谢。