Interceptor OkHttp और Alamofire का एक घटक है जो लॉगिंग, प्रमाणीकरण, कैशिंग और पुनः प्रयास के लिए HTTP अनुरोधों और प्रतिक्रियाओं को इंटरसेप्ट करता है। Square (2026) के अनुसार, सही ढंग से कॉन्फ़िगर किए गए इंटरसेप्टर नेटवर्क डीबगिंग समय को 40% तक कम करते हैं और त्रुटि प्रबंधन को मानकीकृत करते हैं। Application Interceptor प्रति अनुरोध एक बार चलता है, जबकि Network Interceptor प्रत्येक रीडायरेक्ट पर चलता है।
मुख्य बातें
Interceptor एक सॉफ़्टवेयर घटक है जो HTTP क्लाइंट में इंजेक्ट किया जाता है ताकि सर्वर को भेजे जाने से पहले अनुरोधों और एप्लिकेशन तक पहुंचने से पहले प्रतिक्रियाओं को इंटरसेप्ट और संशोधित किया जा सके। मोबाइल डेवलपमेंट में, इंटरसेप्टर क्रॉस-कटिंग चिंताओं को संभालते हैं: स्वचालित प्रमाणीकरण टोकन इंजेक्शन, समय माप के साथ ट्रैफ़िक लॉगिंग, अस्थायी नेटवर्क त्रुटियों पर पुनः प्रयास, और चलते-फिरते डेटा संपीड़न और डिक्रिप्शन। Interceptor आर्किटेक्चर Chain of Responsibility पैटर्न पर आधारित है — प्रत्येक इंटरसेप्टर अनुरोध को संशोधित कर सकता है, उसे निष्पादित कर सकता है या कस्टम प्रतिक्रिया लौटाकर श्रृंखला को बाधित कर सकता है।
OkHttp में, इंटरसेप्टर एक श्रृंखला बनाते हैं। प्रत्येक Interceptor मूल अनुरोध के साथ एक Chain ऑब्जेक्ट प्राप्त करता है और अगले इंटरसेप्टर को नियंत्रण देने के लिए chain.proceed(request) को कॉल करता है। प्रतिक्रिया प्राप्त करने के बाद, इंटरसेप्टर Response का विश्लेषण कर सकता है, उसे संशोधित कर सकता है, त्रुटि पर अनुरोध को पुनः प्रयास कर सकता है या कैशिंग के लिए कस्टम प्रतिक्रिया लौटा सकता है। OkHttpClient.Builder में इंटरसेप्टर जोड़ने का क्रम उनके निष्पादन क्रम को निर्धारित करता है: पहले जोड़ा गया पहले निष्पादित होता है भेजते समय और अंतिम प्राप्त करते समय।
OkHttp इंटरसेप्टर को दो प्रकारों में अलग करता है। Application Interceptor (addInterceptor) एप्लिकेशन कोड और OkHttp के बीच निष्पादित होता है: एक chain.proceed() कॉल — रीडायरेक्ट की परवाह किए बिना सर्वर को एक अनुरोध। Network Interceptor (addNetworkInterceptor) हेडर गठन और कनेक्शन के बाद OkHttp के अंदर निष्पादित होता है — यह प्रत्येक रीडायरेक्ट, पुनः प्रयास या प्रमाणीकरण प्रयास पर चलता है। यह अंतर किसी विशिष्ट कार्य के लिए सही इंटरसेप्टर प्रकार चुनने के लिए महत्वपूर्ण है।
class LoggingInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
Log.d("HTTP", "${request.method} ${request.url}")
val startTime = System.currentTimeMillis()
val response = chain.proceed(request)
val duration = System.currentTimeMillis() - startTime
Log.d("HTTP", "${response.code} in ${duration}ms")
return response
}
}
val client = OkHttpClient.Builder()
.addInterceptor(LoggingInterceptor())
.addNetworkInterceptor(CacheInterceptor())
.build()
LoggingInterceptor — एक Application Interceptor जो विधि, URL, प्रतिक्रिया कोड और निष्पादन समय लॉग करता है। इसे addInterceptor() के माध्यम से जोड़ना रीडायरेक्ट पर दोहराव के बिना प्रति उपयोगकर्ता अनुरोध एक लॉग की गारंटी देता है। CacheInterceptor को Network Interceptor के रूप में जोड़ा जाता है ताकि सर्वर से Cache-Control हेडर को ध्यान में रखा जा सके, जो HTTP अनुरोध बनने के बाद केवल OkHttp के अंदर दिखाई देते हैं।
जब एप्लिकेशन अनुरोध करता है, तो सर्वर 302 या 301 रीडायरेक्ट के साथ प्रतिक्रिया दे सकता है। Application Interceptor सभी रीडायरेक्ट के बाद केवल अंतिम प्रतिक्रिया देखता है — उसे पता नहीं होता कि कितने मध्यवर्ती अनुरोध किए गए। Network Interceptor मध्यवर्ती सहित प्रत्येक अनुरोध और प्रतिक्रिया देखता है। Square (2026) के अनुसार, Network Interceptor कनेक्शन स्तर पर संपीड़ित डेटा (gzip) भी देखता है, जबकि Application Interceptor पहले से ही डीकंप्रेस्ड प्रतिक्रिया प्राप्त करता है। नेटवर्क कॉल की वास्तविक संख्या गिनने के लिए Network Interceptor का उपयोग करें।
Alamofire RequestInterceptor प्रोटोकॉल प्रदान करता है, जो दो प्रोटोकॉल को जोड़ता है: अनुरोध भेजने से पहले संशोधित करने के लिए RequestAdapter और त्रुटियों पर पुनः प्रयास के लिए RequestRetrier। यह अलगाव अनुकूलन (हेडर, टोकन जोड़ना) को पुनः प्रयास नीति (एक्सपोनेंशियल बैकऑफ़, प्रयास सीमा, त्रुटि प्रकार जांच) के साथ लचीले ढंग से संयोजित करने की अनुमति देता है। RequestInterceptor को एकल संरचना या वर्ग द्वारा कार्यान्वित किया जाता है जो दोनों प्रोटोकॉल का अनुपालन करता है।
struct AuthInterceptor: RequestInterceptor {
private let tokenProvider: TokenProvider
func adapt(_ urlRequest: URLRequest,
using state: Session.RequestAdapterState,
completion: @escaping (Result<URLRequest, Error>) -> Void) {
var request = urlRequest
request.setValue("Bearer \(tokenProvider.token)",
forHTTPHeaderField: "Authorization")
completion(.success(request))
}
func retry(_ request: Request,
for session: Session,
dueTo error: Error,
completion: @escaping (RetryResult) -> Void) {
if error is URLError {
completion(.retryWithDelay(1))
} else {
completion(.doNotRetry)
}
}
}
AuthInterceptor Swift पर adapt के माध्यम से Bearer टोकन जोड़ता है और 1 सेकंड की देरी के साथ retry के माध्यम से URLError (नेटवर्क हानि, टाइमआउट) पर स्वचालित रूप से अनुरोध को पुनः प्रयास करता है। अनुकूलन और पुनः प्रयास को अलग करना उन्हें स्वतंत्र रूप से परीक्षण करने की अनुमति देता है — आप पुनः प्रयास तर्क को प्रभावित किए बिना अनुकूलन के लिए यूनिट टेस्ट लिख सकते हैं। Alamofire (2026) के अनुसार, RequestInterceptor iOS प्रोजेक्ट्स में प्रमाणीकरण प्रबंधन को केंद्रीकृत करने का मानक तरीका है।
लॉगिंग — सबसे सामान्य उपयोग मामला। Interceptor URL, विधि, हेडर, अनुरोध और प्रतिक्रिया बॉडी और निष्पादन समय रिकॉर्ड करता है। डीबग बिल्ड में, यह Charles Proxy और Wireshark को बदल देता है; रिलीज़ बिल्ड में, यह अनुरोध संदर्भ के साथ क्रैश रिपोर्ट में मदद करता है। OkHttp लॉगिंग-इंटरसेप्टर लाइब्रेरी से HttpLoggingInterceptor का उपयोग NONE, BASIC, HEADERS और BODY स्तरों के साथ करता है। BODY-स्तर पूर्ण अनुरोध और प्रतिक्रिया बॉडी लॉग करता है — केवल डीबग में उपयोग करें।
जब एक्सेस टोकन समाप्त हो जाता है, Interceptor 401 प्रतिक्रिया को इंटरसेप्ट करता है, रिफ्रेश टोकन API को कॉल करता है और नए टोकन के साथ मूल अनुरोध को पुनः प्रयास करता है। OkHttp में, यह Authenticator या response.code जांच के साथ कस्टम Interceptor के माध्यम से कार्यान्वित किया जाता है। Authenticator के पास केवल प्रतिक्रिया हेडर तक पहुंच है, जबकि Interceptor के पास पूर्ण बॉडी तक पहुंच है। Alamofire में — RequestRetrier के माध्यम से, टोकन रिफ्रेश के बाद .retry लौटाता है। OWASP (2026) के अनुसार, Interceptor के माध्यम से स्वचालित टोकन रिफ्रेश क्रेडेंशियल लीकेज के जोखिम को कम करता है।
Content-Type, Accept-Language, User-Agent, Device-ID — प्रत्येक अनुरोध में आवश्यक हेडर। Interceptor उन्हें केंद्रीय रूप से जोड़ता है, बिना प्रत्येक API विधि में दोहराव के। User-Agent ऐप स्टार्टअप पर एक बार बनता है: “AppName/1.0 (Android 14; Pixel 8)”। Accept-Language डिवाइस सिस्टम भाषा से लिया जाता है। Alamofire (2026) के अनुसार, Interceptor के माध्यम से केंद्रीकृत हेडर प्रबंधन गलत हेडर त्रुटियों को 30% तक कम करता है।
| परिदृश्य | OkHttp | Alamofire |
|---|---|---|
| लॉगिंग | HttpLoggingInterceptor | EventMonitor |
| Auth टोकन | Authenticator + Interceptor | RequestInterceptor |
| हेडर | addInterceptor | RequestAdapter |
| पुनः प्रयास | पुनः प्रयास के साथ Interceptor | RequestRetrier |
| कैशिंग | CacheInterceptor | CachedResponseHandler |
OkHttp में Interceptors जोड़ने का क्रम पूरी श्रृंखला के व्यवहार को निर्धारित करता है। पहला जोड़ा गया इंटरसेप्टर अनुरोध भेजते समय पहले और प्रतिक्रिया प्राप्त करते समय अंतिम निष्पादित होता है। लॉगिंग के लिए, Interceptor को पहले जोड़ें — यह अन्य इंटरसेप्टर से सभी संशोधनों के साथ अंतिम अनुरोध देखेगा। संपीड़न के लिए, इसे अंतिम जोड़ें ताकि संपीड़न अंतिम डेटा पर लागू हो। प्रमाणीकरण के लिए, इसे पुनः प्रयास से पहले जोड़ें ताकि अगले प्रयास से पहले टोकन रिफ्रेश हो।
रिलीज़ बिल्ड में, BuildConfig.DEBUG या डिपेंडेंसी इंजेक्शन के माध्यम से लॉगिंग अक्षम करें। कैशिंग के लिए addNetworkInterceptor का उपयोग करें — Network Interceptor सर्वर Cache-Control हेडर देखता है और कैशिंग नीति की सही व्याख्या करता है। प्रमाणीकरण के लिए, addInterceptor (Application) का उपयोग करें — यह तीसरे पक्ष के डोमेन पर रीडायरेक्ट पर पुनः इंटरसेप्शन को रोकता है जहां प्राधिकरण हेडर नहीं भेजे जाने चाहिए। okhttp-testing-support से MockWebServer का उपयोग करके प्रत्येक Interceptor का अलग-अलग परीक्षण करें — यह अनुरोधों को इंटरसेप्ट करता है और पूर्व-तैयार प्रतिक्रियाएँ लौटाता है, जिससे आप वास्तविक सर्वर के बिना इंटरसेप्टर तर्क को सत्यापित कर सकते हैं।
प्रत्येक Interceptor अनुरोध समय में एक छोटी देरी जोड़ता है। 3-4 इंटरसेप्टर (लॉगिंग, प्रमाणीकरण, संपीड़न, कैशिंग) की विशिष्ट श्रृंखला में, ओवरहेड प्रति अनुरोध 5 मिलीसेकंड से कम है। समस्याएँ तब उत्पन्न होती हैं जब Interceptor ब्लॉकिंग ऑपरेशन करता है: सिंक्रोनस रिफ्रेश टोकन API कॉल, फ़ाइल में बड़े लॉग लिखना या अनुरोध बॉडी को एन्क्रिप्ट करना। ये सभी ऑपरेशन एसिंक्रोनस होने चाहिए या बैकग्राउंड थ्रेड पर निष्पादित होने चाहिए। Square (2026) के अनुसार, OkHttp Interceptors को Dispatcher थ्रेड पूल में निष्पादित करता है — एक इंटरसेप्टर को ब्लॉक करना पूरी श्रृंखला में देरी करता है।
अक्सर पूछे जाने वाले प्रश्न
addInterceptor (Application) एप्लिकेशन और OkHttp के बीच एक बार निष्पादित होता है — यह रीडायरेक्ट या कनेक्शन संपीड़न नहीं देखता। addNetworkInterceptor (Network) प्रत्येक नेटवर्क कॉल पर OkHttp के अंदर निष्पादित होता है — यह संपीड़न के बाद रीडायरेक्ट, पुनः प्रयास और डेटा देखता है। लॉगिंग और प्रमाणीकरण के लिए Application चुनें, कैशिंग के लिए Network चुनें।
इंटरसेप्टर response.code == 401 की जांच करता है, Retrofit या URLSession के माध्यम से एक एसिंक्रोनस रिफ्रेश टोकन API को कॉल करता है, नया टोकन सहेजता है और मूल अनुरोध को पुनः प्रयास करता है। OkHttp में, Basic Auth के लिए Authenticator और रिफ्रेश के साथ Bearer के लिए Interceptor का उपयोग करें। Alamofire में — त्रुटि प्रकार जांच के साथ retry का उपयोग करें।
हाँ — Interceptor में भारी ऑपरेशन (बड़ी बॉडी लॉग करना, एन्क्रिप्शन, सिंक्रोनस API कॉल) प्रतिक्रिया समय बढ़ाते हैं। एसिंक्रोनस कॉलबैक का उपयोग करें, BuildConfig.DEBUG के माध्यम से लॉगिंग को केवल डीबग बिल्ड तक सीमित करें और intercept विधि में ब्लॉकिंग ऑपरेशन न करें।
Authenticator 401 प्रतिक्रियाओं के लिए एक विशेष इंटरसेप्टर है, जो Basic Auth या Bearer टोकन लागू करता है। Authenticator के पास अनुरोध बॉडी तक पहुंच नहीं है और वह भेजने से पहले हेडर को संशोधित नहीं कर सकता — केवल प्राधिकरण त्रुटि प्रतिक्रिया को संभालता है। दूसरी ओर, Interceptor निष्पादन के किसी भी चरण में अनुरोध को संशोधित कर सकता है।
OkHttp में, Interceptor को OkHttpClient.Builder में पास करें — इस क्लाइंट के सभी अनुरोध इसके माध्यम से जाते हैं। Alamofire में, RequestInterceptor को Session कॉन्फ़िगरेशन में जोड़ें। यदि आप कई क्लाइंट का उपयोग करते हैं (उदाहरण के लिए, विभिन्न APIs के लिए), Builder पैटर्न का उपयोग करके सामान्य इंटरसेप्टर के साथ एक बेस Builder बनाएं।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें