के माध्यम से इंटरसेप्ट और पुनः प्रयास करें मुझे OkHttp Interceptor
के अंदर अनुरोध पुनः प्रयास करने की आवश्यकता है। उदाहरण के लिए आने वाले अनुरोध हैं जिन्हें Authorization
टोकन की आवश्यकता है। यदि Authorization
टोकन समाप्त हो गया है, तो सर्वर 403
कोड के साथ प्रतिक्रिया देता है। इस मामले में मैं एक नया टोकन पुनर्प्राप्त कर रहा हूं और उसी chain
ऑब्जेक्ट का उपयोग करके फिर से कॉल करने का प्रयास कर रहा हूं।ओकेएचटीपी इंटरसेप्टर्स
लेकिन ओकेएचटीपी एक अपवाद फेंकता है, जिसमें कहा गया है कि आप उसी chain
ऑब्जेक्ट के साथ दो अनुरोध नहीं कर सकते हैं।
java.lang.IllegalStateException: network interceptor [email protected] must call proceed() exactly once
मुझे आश्चर्य है कि वहाँ OkHttp Interceptor
के अंदर पुन: प्रयास नेटवर्क अनुरोध के इस समस्या के लिए एक साफ समाधान है तो क्या होगा?
धन्यवाद
public final class ApplicationApiHeaders implements Interceptor {
private static final String AUTHORIZATION = "Authorization";
private TokenProvider mProvider;
public ApplicationApiHeaders(TokenProvider provider) {
mProvider = provider;
}
@Override
public Response intercept(Chain chain) throws IOException {
Token token = mProvider.getApplicationToken();
String bearerToken = "Bearer " + token.getAccessToken();
System.out.println("Token: " + bearerToken);
Request request = chain.request();
request = request.newBuilder()
.addHeader(AUTHORIZATION, bearerToken)
.build();
Response response = chain.proceed(request);
if (!response.isSuccessful() && isForbidden(response.code())) {
Token freshToken = mProvider.invalidateAppTokenAndGetNew();
String freshBearerToken = freshToken.getAccessToken();
Request newRequest = chain.request();
newRequest = newRequest.newBuilder()
.addHeader(AUTHORIZATION, freshBearerToken)
.build();
response = chain.proceed(newRequest);
}
return response;
}
private static boolean isForbidden(int code) {
return code == HttpURLConnection.HTTP_FORBIDDEN;
}
}