我一直在使用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();
}
答案 0 :(得分:3)
OkHttp中没有任何内容可以在保留POST方法的同时处理重定向。这可能是我们设计中的一个错误。在此期间,您可以通过处理拦截器中的重定向来解决此问题。您可以使用您已编写的代码作为起点; interceptors doc也可以提供帮助。