我正在使用该库com.squareup.retrofit:retrofit:1.9.0
,以便从我的Android应用程序发送数据到我的服务器.
实际上,当我想向服务器发送请求时,我发现了这个错误:
failure : retrofit.RetrofitError: 307 Temporary Redirect
我尝试了很多想法,但同样的问题仍然存在.
请专家帮我解决这个问题.
问候
编辑:如果您不能使用Retrofit 1.9,切换到更新版本(即2.0+)应自动处理下面介绍的解决方案.
看起来你的HTTP客户端(在Android端)应该通过读取Location
发生这种情况时收到的响应头中的值来处理这种重定向,这应该包含你应该再次从客户端点击的目标重定向URL.
见他们的意见在这里.
因此,现在你需要在应用程序级别实现这一点(对于Retrofit 1来说很难实现,在即将推出的Retrofit 2时更容易)或者等到OkHttp 3.1(ish)实现最新规范时.
另见307的含义.
修复307错误 - 常规来自Web服务器的307响应应始终包含应进行重定向的备用URL.如果是这样,Web浏览器将立即重试替代URL.因此,您实际上从未在Web浏览器中看到307错误,除非您有一个损坏的重定向链,例如URL A重定向到URL B,后者又重定向回到URL A.如果您的客户端不是Web浏览器,它应该表现为与Web浏览器相同,即立即重试替代URL.
如果Web服务器未返回带有307响应的备用URL,则Web服务器软件本身有缺陷或Webmaster尚未正确设置URL重定向.
请参阅Javadoc for Retrofit 1.9.0以从响应中获取Location头值(URL);
http://static.javadoc.io/com.squareup.retrofit/retrofit/1.9.0/retrofit/client/Response.html#getHeaders--
// omitting null check for brevity for (Header header : response.getHeaders()) { if (header.getName().equals("Location")) { redirectURL = header.getValue(); } } // do a redirect to redirectURL