Interceptor — यह क्या है, OkHttp और Alamofire इंटरसेप्टर के प्रकार

लेखक: IT Sectr प्रकाशित: 2026-03-08 पढ़ने का समय: 8 मिनट

Interceptor OkHttp और Alamofire का एक घटक है जो लॉगिंग, प्रमाणीकरण, कैशिंग और पुनः प्रयास के लिए HTTP अनुरोधों और प्रतिक्रियाओं को इंटरसेप्ट करता है। Square (2026) के अनुसार, सही ढंग से कॉन्फ़िगर किए गए इंटरसेप्टर नेटवर्क डीबगिंग समय को 40% तक कम करते हैं और त्रुटि प्रबंधन को मानकीकृत करते हैं। Application Interceptor प्रति अनुरोध एक बार चलता है, जबकि Network Interceptor प्रत्येक रीडायरेक्ट पर चलता है।

मुख्य बातें

  • Interceptor — क्रॉस-कटिंग चिंताओं के लिए OkHttp और Alamofire में HTTP अनुरोध और प्रतिक्रिया इंटरसेप्टर।
  • Application Interceptor एप्लिकेशन और OkHttp के बीच अनुरोध से पहले और बाद में एक बार निष्पादित होता है।
  • Network Interceptor OkHttp के भीतर प्रत्येक रीडायरेक्ट और पुनः प्रयास पर चलता है।
  • RequestInterceptor Alamofire में अनुरोध अनुकूलन और पुनः प्रयास को जोड़ता है।
  • Chain.proceed() — OkHttp की मुख्य विधि जो अनुरोध को इंटरसेप्टर श्रृंखला के साथ भेजती है।

Interceptor क्या है?

Interceptor एक सॉफ़्टवेयर घटक है जो HTTP क्लाइंट में इंजेक्ट किया जाता है ताकि सर्वर को भेजे जाने से पहले अनुरोधों और एप्लिकेशन तक पहुंचने से पहले प्रतिक्रियाओं को इंटरसेप्ट और संशोधित किया जा सके। मोबाइल डेवलपमेंट में, इंटरसेप्टर क्रॉस-कटिंग चिंताओं को संभालते हैं: स्वचालित प्रमाणीकरण टोकन इंजेक्शन, समय माप के साथ ट्रैफ़िक लॉगिंग, अस्थायी नेटवर्क त्रुटियों पर पुनः प्रयास, और चलते-फिरते डेटा संपीड़न और डिक्रिप्शन। Interceptor आर्किटेक्चर Chain of Responsibility पैटर्न पर आधारित है — प्रत्येक इंटरसेप्टर अनुरोध को संशोधित कर सकता है, उसे निष्पादित कर सकता है या कस्टम प्रतिक्रिया लौटाकर श्रृंखला को बाधित कर सकता है।

इंटरसेप्टर श्रृंखला कैसे काम करती है

OkHttp में, इंटरसेप्टर एक श्रृंखला बनाते हैं। प्रत्येक Interceptor मूल अनुरोध के साथ एक Chain ऑब्जेक्ट प्राप्त करता है और अगले इंटरसेप्टर को नियंत्रण देने के लिए chain.proceed(request) को कॉल करता है। प्रतिक्रिया प्राप्त करने के बाद, इंटरसेप्टर Response का विश्लेषण कर सकता है, उसे संशोधित कर सकता है, त्रुटि पर अनुरोध को पुनः प्रयास कर सकता है या कैशिंग के लिए कस्टम प्रतिक्रिया लौटा सकता है। OkHttpClient.Builder में इंटरसेप्टर जोड़ने का क्रम उनके निष्पादन क्रम को निर्धारित करता है: पहले जोड़ा गया पहले निष्पादित होता है भेजते समय और अंतिम प्राप्त करते समय।

OkHttp में Interceptor: Application और Network

OkHttp इंटरसेप्टर को दो प्रकारों में अलग करता है। Application Interceptor (addInterceptor) एप्लिकेशन कोड और OkHttp के बीच निष्पादित होता है: एक chain.proceed() कॉल — रीडायरेक्ट की परवाह किए बिना सर्वर को एक अनुरोध। Network Interceptor (addNetworkInterceptor) हेडर गठन और कनेक्शन के बाद OkHttp के अंदर निष्पादित होता है — यह प्रत्येक रीडायरेक्ट, पुनः प्रयास या प्रमाणीकरण प्रयास पर चलता है। यह अंतर किसी विशिष्ट कार्य के लिए सही इंटरसेप्टर प्रकार चुनने के लिए महत्वपूर्ण है।

kotlin
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

Alamofire RequestInterceptor प्रोटोकॉल प्रदान करता है, जो दो प्रोटोकॉल को जोड़ता है: अनुरोध भेजने से पहले संशोधित करने के लिए RequestAdapter और त्रुटियों पर पुनः प्रयास के लिए RequestRetrier। यह अलगाव अनुकूलन (हेडर, टोकन जोड़ना) को पुनः प्रयास नीति (एक्सपोनेंशियल बैकऑफ़, प्रयास सीमा, त्रुटि प्रकार जांच) के साथ लचीले ढंग से संयोजित करने की अनुमति देता है। RequestInterceptor को एकल संरचना या वर्ग द्वारा कार्यान्वित किया जाता है जो दोनों प्रोटोकॉल का अनुपालन करता है।

swift
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% तक कम करता है।

परिदृश्यOkHttpAlamofire
लॉगिंगHttpLoggingInterceptorEventMonitor
Auth टोकनAuthenticator + InterceptorRequestInterceptor
हेडरaddInterceptorRequestAdapter
पुनः प्रयासपुनः प्रयास के साथ InterceptorRequestRetrier
कैशिंगCacheInterceptorCachedResponseHandler

सर्वोत्तम अभ्यास और श्रृंखला क्रम

OkHttp में Interceptors जोड़ने का क्रम पूरी श्रृंखला के व्यवहार को निर्धारित करता है। पहला जोड़ा गया इंटरसेप्टर अनुरोध भेजते समय पहले और प्रतिक्रिया प्राप्त करते समय अंतिम निष्पादित होता है। लॉगिंग के लिए, Interceptor को पहले जोड़ें — यह अन्य इंटरसेप्टर से सभी संशोधनों के साथ अंतिम अनुरोध देखेगा। संपीड़न के लिए, इसे अंतिम जोड़ें ताकि संपीड़न अंतिम डेटा पर लागू हो। प्रमाणीकरण के लिए, इसे पुनः प्रयास से पहले जोड़ें ताकि अगले प्रयास से पहले टोकन रिफ्रेश हो।

प्रोडक्शन बिल्ड अनुशंसाएँ

रिलीज़ बिल्ड में, BuildConfig.DEBUG या डिपेंडेंसी इंजेक्शन के माध्यम से लॉगिंग अक्षम करें। कैशिंग के लिए addNetworkInterceptor का उपयोग करें — Network Interceptor सर्वर Cache-Control हेडर देखता है और कैशिंग नीति की सही व्याख्या करता है। प्रमाणीकरण के लिए, addInterceptor (Application) का उपयोग करें — यह तीसरे पक्ष के डोमेन पर रीडायरेक्ट पर पुनः इंटरसेप्शन को रोकता है जहां प्राधिकरण हेडर नहीं भेजे जाने चाहिए। okhttp-testing-support से MockWebServer का उपयोग करके प्रत्येक Interceptor का अलग-अलग परीक्षण करें — यह अनुरोधों को इंटरसेप्ट करता है और पूर्व-तैयार प्रतिक्रियाएँ लौटाता है, जिससे आप वास्तविक सर्वर के बिना इंटरसेप्टर तर्क को सत्यापित कर सकते हैं।

Interceptor प्रदर्शन

प्रत्येक Interceptor अनुरोध समय में एक छोटी देरी जोड़ता है। 3-4 इंटरसेप्टर (लॉगिंग, प्रमाणीकरण, संपीड़न, कैशिंग) की विशिष्ट श्रृंखला में, ओवरहेड प्रति अनुरोध 5 मिलीसेकंड से कम है। समस्याएँ तब उत्पन्न होती हैं जब Interceptor ब्लॉकिंग ऑपरेशन करता है: सिंक्रोनस रिफ्रेश टोकन API कॉल, फ़ाइल में बड़े लॉग लिखना या अनुरोध बॉडी को एन्क्रिप्ट करना। ये सभी ऑपरेशन एसिंक्रोनस होने चाहिए या बैकग्राउंड थ्रेड पर निष्पादित होने चाहिए। Square (2026) के अनुसार, OkHttp Interceptors को Dispatcher थ्रेड पूल में निष्पादित करता है — एक इंटरसेप्टर को ब्लॉक करना पूरी श्रृंखला में देरी करता है।

  • क्रम मायने रखता है — लॉगिंग पहले, प्रमाणीकरण पुनः प्रयास से पहले, संपीड़न अंतिम
  • डीबग बनाम रिलीज़ — HttpLoggingInterceptor केवल डीबग बिल्ड में
  • पृथक्करण — प्रत्येक Interceptor एक कार्य संभालता है (एकल जिम्मेदारी)
  • अतुल्यकालिकता — Interceptor OkHttp बैकग्राउंड थ्रेड पर चलता है, UI को ब्लॉक नहीं करता

अक्सर पूछे जाने वाले प्रश्न

OkHttp में addInterceptor और addNetworkInterceptor में क्या अंतर है?

addInterceptor (Application) एप्लिकेशन और OkHttp के बीच एक बार निष्पादित होता है — यह रीडायरेक्ट या कनेक्शन संपीड़न नहीं देखता। addNetworkInterceptor (Network) प्रत्येक नेटवर्क कॉल पर OkHttp के अंदर निष्पादित होता है — यह संपीड़न के बाद रीडायरेक्ट, पुनः प्रयास और डेटा देखता है। लॉगिंग और प्रमाणीकरण के लिए Application चुनें, कैशिंग के लिए Network चुनें।

Interceptor स्वचालित रूप से टोकन कैसे रिफ्रेश करता है?

इंटरसेप्टर response.code == 401 की जांच करता है, Retrofit या URLSession के माध्यम से एक एसिंक्रोनस रिफ्रेश टोकन API को कॉल करता है, नया टोकन सहेजता है और मूल अनुरोध को पुनः प्रयास करता है। OkHttp में, Basic Auth के लिए Authenticator और रिफ्रेश के साथ Bearer के लिए Interceptor का उपयोग करें। Alamofire में — त्रुटि प्रकार जांच के साथ retry का उपयोग करें।

क्या Interceptor एप्लिकेशन को धीमा कर सकता है?

हाँ — Interceptor में भारी ऑपरेशन (बड़ी बॉडी लॉग करना, एन्क्रिप्शन, सिंक्रोनस API कॉल) प्रतिक्रिया समय बढ़ाते हैं। एसिंक्रोनस कॉलबैक का उपयोग करें, BuildConfig.DEBUG के माध्यम से लॉगिंग को केवल डीबग बिल्ड तक सीमित करें और intercept विधि में ब्लॉकिंग ऑपरेशन न करें।

OkHttp में Authenticator क्या है और यह Interceptor से कैसे अलग है?

Authenticator 401 प्रतिक्रियाओं के लिए एक विशेष इंटरसेप्टर है, जो Basic Auth या Bearer टोकन लागू करता है। Authenticator के पास अनुरोध बॉडी तक पहुंच नहीं है और वह भेजने से पहले हेडर को संशोधित नहीं कर सकता — केवल प्राधिकरण त्रुटि प्रतिक्रिया को संभालता है। दूसरी ओर, Interceptor निष्पादन के किसी भी चरण में अनुरोध को संशोधित कर सकता है।

मैं सभी अनुरोधों में एक ही Interceptor कैसे जोड़ूं?

OkHttp में, Interceptor को OkHttpClient.Builder में पास करें — इस क्लाइंट के सभी अनुरोध इसके माध्यम से जाते हैं। Alamofire में, RequestInterceptor को Session कॉन्फ़िगरेशन में जोड़ें। यदि आप कई क्लाइंट का उपयोग करते हैं (उदाहरण के लिए, विभिन्न APIs के लिए), Builder पैटर्न का उपयोग करके सामान्य इंटरसेप्टर के साथ एक बेस Builder बनाएं।

सारांश

  • Interceptor — Chain of Responsibility पैटर्न पर आधारित HTTP अनुरोध और प्रतिक्रिया इंटरसेप्शन तंत्र।
  • OkHttp दो प्रकार प्रदान करता है: Application (प्रति अनुरोध एक कॉल) और Network (प्रत्येक रीडायरेक्ट और पुनः प्रयास पर)।
  • Alamofire एकल RequestInterceptor में अनुकूलन (RequestAdapter) और पुनः प्रयास (RequestRetrier) को अलग करता है।
  • मुख्य उपयोग मामले — लॉगिंग, प्रमाणीकरण, हेडर, पुनः प्रयास और HTTP प्रतिक्रिया कैशिंग।
  • Builder में Interceptors जोड़ने का क्रम निष्पादन अनुक्रम निर्धारित करता है: लॉगिंग पहले, संपीड़न अंतिम।
  • प्रोडक्शन बिल्ड में BuildConfig फ़्लैग और DI इंजेक्शन के माध्यम से डीबग लॉगिंग अक्षम करने की आवश्यकता होती है।
  • एक अच्छी तरह से कॉन्फ़िगर की गई इंटरसेप्टर श्रृंखला नेटवर्क डीबगिंग समय को 40% तक कम करती है और त्रुटि प्रबंधन को मानकीकृत करती है।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें