接收状态307的客户端的正确行为

时间:2015-06-24 09:57:56

标签: android http firebase okhttp

我一直在使用OkHttp来点击Nest的Firebase API(我不喜欢Firebase SDK,因为它保持套接字打开,这对我的目的来说是耗电的)。在几个请求中,我将获得状态代码307以重定向到另一个URL。这并不奇怪。 令人惊讶的是,即使我将client.setFollowRedirects(true)和/或client.setFollowSSLRedirects(true)都调用true,OkHttp也不会遵循重定向。

我已经在下面复制了我的doPut()方法版本。如果递归调用不存在,通常尝试将不执行任何操作。我想知道Firebase是否使用了错误的状态代码,OkHttp没有正确解释它,或者这是否是处理这种情况的正确方法。这里似乎有些不对劲,但我不确定是什么。

public static String doPut(String url, String body, String contentType) throws IOException {
  OkHttpClient client = new OkHttpClient();
  RequestBody requestBody =
      RequestBody.create(MediaType.parse(contentType), body);
  Request request = new Request.Builder().url(url).put(requestBody).build();
  Response response = client.newCall(request).execute();
  if (response.code() == 307) {
    doPut(response.header("Location"), body, contentType);
  }
  return response.body().string();
}

1 个答案:

答案 0 :(得分:3)

OkHttp中没有任何内容可以在保留POST方法的同时处理重定向。这可能是我们设计中的一个错误。在此期间,您可以通过处理拦截器中的重定向来解决此问题。您可以使用您已编写的代码作为起点; interceptors doc也可以提供帮助。