改造:检测是否需要网络身份验证

Retrofit: detect if web authentication needed

我正在使用 Retrofit(使用 RxJava)下载一个文本文件。

 @Streaming
 @GET
 Observable<ResponseBody> download(@Url String file);

一切正常,除非用户使用需要网络身份验证的 public wifi。在这种情况下,下载仍然成功,我收到的是一个包含该身份验证网页的 HTML 的文件。在这种情况下如何检查并引发错误?我尝试使用拦截器、网络拦截器 (Okhttp)、禁用重定向 (Retrofit),但没有成功,因为没有抛出异常。

要么对你的文件进行校验和并在你得到它时检查它,要么检查内容类型:

@Streaming
@GET
Observable<Response<ResponseBody>> download(@Url String file);

download("http://...")
.map(response -> {
     if(!"application/my-content-type".equals(
           response.headers("Content-Type")) {
        throw new RuntimeException("Bad download");
     }
     return resource.body();
})