lot*_*tfi 18 java android retrofit
我正在使用该库com.squareup.retrofit:retrofit:1.9.0,以便从我的Android应用程序发送数据到我的服务器.
实际上,当我想向服务器发送请求时,我发现了这个错误:
failure : retrofit.RetrofitError: 307 Temporary Redirect
Run Code Online (Sandbox Code Playgroud)
我尝试了很多想法,但同样的问题仍然存在.
请专家帮我解决这个问题.
问候
编辑:如果您不能使用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);
// omitting null check for brevity
for (Header header : response.getHeaders())
{
if (header.getName().equals("Location")) {
redirectURL = header.getValue();
}
}
// do a redirect to redirectURL
Run Code Online (Sandbox Code Playgroud)
经过一番努力,我得到了解决方案。可能这会帮助你。如果您收到此错误“203 HTTP 307 临时重定向”,那么此技巧将对您有所帮助。最后将“/”附加到您的 Web 服务,然后检查此错误是否消失。我不知道这背后的原因,但它对我有用。
对我来说,我的旧请求 Web 服务:https://mydomain/rest/Search。使用这个 URL,我得到了“203 HTTP 307 Temporary Redirect”,我能够在 POSTMAN 和 Web 浏览器中得到响应。
我的新请求 Web 服务的技巧:https://mydomain/rest/Search/。这个'/'解决了这个问题。
| 归档时间: |
|
| 查看次数: |
1993 次 |
| 最近记录: |