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

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)

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

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

问候

Ker*_*rem 5

编辑:如果您不能使用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
Run Code Online (Sandbox Code Playgroud)


Rea*_*oid 5

经过一番努力,我得到了解决方案。可能这会帮助你。如果您收到此错误“203 HTTP 307 临时重定向”,那么此技巧将对您有所帮助。最后将“/”附加到您的 Web 服务,然后检查此错误是否消失。我不知道这背后的原因,但它对我有用。

对我来说,我的旧请求 Web 服务:https://mydomain/rest/Search。使用这个 URL,我得到了“203 HTTP 307 Temporary Redirect”,我能够在 POSTMAN 和 Web 浏览器中得到响应。

我的新请求 Web 服务的技巧:https://mydomain/rest/Search/。这个'/'解决了这个问题。