故障:改造。改造错误:307 临时重定向?

2022-09-02 13:46:10

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

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

failure : retrofit.RetrofitError: 307 Temporary Redirect

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

请专家帮助我解决这个问题。

问候


答案 1

编辑:如果您不能使用改造1.9,切换到较新版本(即2.0 +)应该自动处理下面介绍的解决方案。


看起来您的HTTP客户端(在Android端)应该通过读取发生这种情况时收到的响应标头中的值来处理此重定向,该值应包含您应该再次从客户端点击的目标重定向URL。Location

在这里查看他们的评论。

因此,现在您需要在应用程序级别实现这一点(这在改造1中很难,在即将到来的改造2中更容易),或者等到OkHttp 3.1(ish)当我们实现最新规范时。

另请参阅 307 的含义。

修复 307 错误 - 常规 来自 Web 服务器的 307 响应应始终包含应进行重定向的备用 URL。如果是这样,Web 浏览器将立即重试备用 URL。因此,您实际上从未在Web浏览器中看到307错误,除非您有一个损坏的重定向链,例如URL A重定向到URL B,而URL B又重定向回URL A。如果您的客户端不是Web浏览器,它的行为方式应与Web浏览器相同,即立即重试备用URL。

如果 Web 服务器未返回带有 307 响应的备用 URL,则 Web 服务器软件本身存在缺陷,或者网站站长未正确设置 URL 重定向。

请参阅javadoc for Retrofit 1.9.0,从响应中获取位置标头值(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

答案 2

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

对我来说,我的旧请求Web服务:https://mydomain/rest/Search。使用此URL,我得到了“203 HTTP 307临时重定向”,在那里我能够在POSTMAN和Web浏览器中获得响应。

我的新请求Web服务与技巧:https://mydomain/rest/Search/。此“/”可解决问题。


推荐