改造-是否可以避免从应用程序拦截器调用实际api并返回硬编码响应?
我知道这就是拦截器的工作方式,来自应用程序的请求通过 OkHttp 核心,通过改造包装器和 OkHttpp 核心调用来发出实际的网络请求,并通过改造包装器对应用程序拦截器响应进行网络响应。
有没有办法避免从应用程序拦截器调用实际请求,例如,在应用程序拦截器的某些场景中,检查请求 URL 是否是某个字符串,然后,在这种情况下,不要调用实际的网络请求并直接从应用程序拦截器返回硬编码的响应?
回答
您可以返回一个新的 Response 而不是调用chain.proceed(),它会阻止链向前移动。你可以这样做。
if(something)
return Response.Builder()
.code(200) //Or whatever you might later check from
.protocol(Protocol.HTTP_2) //or 1
.message("SUCCESS")
.body(ResponseBody.create(MediaType.get("application/json"), "{"x": 1}")) // your response
.request(chain.request())
.build()
我还建议定义一个注释,并将其放入拦截器中,而不是检查 URL。
request.tag(Invocation::class.java)?.method()?.getAnnotation(YourAnnotation::class.java)