在我的应用程序中,我将xml文件发布到服务器,但有时服务器将发回302然后重定向。
但是,重定向后的方法变为GET,而不是POST,并且我在xml文件中的数据无法传送到服务器。
最后我得到的状态代码是404。
有没有办法自行处理重定向?重定向发生时我可以做些什么吗?
任何人都可以提供帮助? THX!
答案 0 :(得分:5)
来自RFC 2616:
如果收到302状态代码以响应除以外的请求 GET或HEAD,用户代理不得自动重定向 除非可以由用户确认,否则请求,因为这可能 改变发出请求的条件。
您确定您的服务器没有使用“POST, redirect, GET”成语吗?
您可以在Apache HTTP客户端中disable automatic following of redirects。例如:
_httpClient = new DefaultHttpClient();
_httpClient.getParams().setParameter(
ClientPNames.HANDLE_REDIRECTS, Boolean.FALSE);
答案 1 :(得分:0)
对于记录,302不应被视为执行重定向请求作为GET的指令,这就是303的用途。这种行为很草率,HttpClient的开发人员应该为自己感到羞耻...... :-P
我怀疑你唯一的选择就是编写自己的HTTP客户端套接字级实现,正确处理重定向。你可以浏览一下互联网,看看是否有其他人已经生成了一些你可以借用的代码,但如果没有,你将不得不自己动手。
我以前在PHP中做过这一点 - 实际上并不难,HTTP是一个相当简单的协议来实现。我认为cURL可以正确处理这些重定向,如果你可以将任务分配给那个?