我使用Okhttp从我的服务器下载了一些 http请求来下载JSON 。 对于我和我所有的阿尔法测试人员来说,一切都很好,但在野外我 当我尝试使用解析响应时遇到一些异常 GSON。
据我所知,异常发生,因为连接被重定向,在用户在机场或使用有限的情况下 酒店内的WIFI连接等。
例外:
Exception java.lang.IllegalStateException: closed
okhttp3.internal.http.Http1xStream$FixedLengthSource.read (Http1xStream.java:378)
okio.Buffer.writeAll (Buffer.java:956)
okio.RealBufferedSource.readByteArray (RealBufferedSource.java:92)
okhttp3.ResponseBody.bytes (ResponseBody.java:83)
okhttp3.ResponseBody.string (ResponseBody.java:109)
[xxxx].BackendFilter.handleResponse (BackendFilter.java:131)
[xxxx].BackendFilter.access$300 (BackendFilter.java:30)
[xxxx].BackendFilter$2.onResponse (BackendFilter.java:114)
okhttp3.RealCall$AsyncCall.execute (RealCall.java:133)
okhttp3.internal.NamedRunnable.run (NamedRunnable.java:32)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1133)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:607)
java.lang.Thread.run (Thread.java:762)
从我在firebase中的日志中我可以看到响应的URL不同 到我以前在请求中设置的网址。
即。我得到:http://www.tunisietelecom.tn/tt/themes/html/TT_Theme/infosolde.html
基本上说:
尊敬的客户,
您的计划已经用尽,继续从您的INTERNET中受益 优惠,通过手机拨打* 140#,或者拨打* 145#数据 关键包。
所以我假设这个特定用户被重定向,因为他的数据包 过期了。
响应代码仍为200 ,我的应用程序尝试解析
响应体,显然失败了。不是我的例外
预期,但无论如何它都失败了。 (任何人都可以向我解释,为什么这个例外
发生。而不是Gson JsonSyntaxException
?)
我在stackoverflow上阅读了多篇文章并事先进行了谷歌搜索, 但任何人都可以告诉我如何处理这种重定向? 如果我(如何?),顺利解除此请求的最佳方法是什么? 识别重定向。
TL;博士
我现在的方法是首先通过设置OkHttpClient client = new OkHttpClient().newBuilder().followRedirects(false).followSslRedirects(false).build();
来禁用重定向,但我不确定(并且熟悉此主题),如果有的话
重定向完全正常的情况,我想允许它们。
下一种方法,不禁用重定向就是调查
响应。如果方法response.isRedirect()
返回true,那么
请求的网址(response.request.url()
)与之不同
我要求的网址,我会顺利驳回请求。
这些方法中有哪些适合?是否有更好的策略来处理
这些重定向?异常是否因为a而发生
重定向?
提前谢谢大家!