当前位置:  开发笔记 > 编程语言 > 正文

失败:retrofit.RetrofitError:307临时重定向?

如何解决《失败:retrofit.RetrofitError:307临时重定向?》经验,为你挑选了1个好方法。

我正在使用该库com.squareup.retrofit:retrofit:1.9.0,以便从我的Android应用程序发送数据到我的服务器.

实际上,当我想向服务器发送请求时,我发现了这个错误:

failure : retrofit.RetrofitError: 307 Temporary Redirect

我尝试了很多想法,但同样的问题仍然存在.

请专家帮我解决这个问题.

问候



1> Kerem..:

编辑:如果您不能使用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

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有