OkHttp — यह क्या है, विशेषताएँ और HTTP क्लाइंट की आर्किटेक्चर

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

OkHttp Android और Kotlin के लिए एक उच्च-प्रदर्शन HTTP क्लाइंट है, जिसे Square कंपनी ने Retrofit और अन्य नेटवर्किंग लाइब्रेरियों के आधार के रूप में विकसित किया है। यह कुशल कनेक्शन प्रबंधन, अंतर्निहित कैशिंग और HTTP/2 समर्थन प्रदान करता है। Square, 2025 के अनुसार, OkHttp दुनिया भर के एप्लिकेशन में प्रतिदिन अरबों अनुरोधों को संभालता है।

मुख्य बिंदु

  • OkHttp — HTTP/2 और SPDY समर्थन के साथ Square का Android और Kotlin के लिए HTTP क्लाइंट
  • कनेक्शन पूल — विलंबता कम करने के लिए TCP कनेक्शन के पुन: उपयोग की तंत्र
  • इंटरसेप्टर — Interceptor और NetworkInterceptor अनुरोधों और प्रतिक्रियाओं को संशोधित करते हैं
  • कैशिंग — अंतर्निहित Cache बार-बार अनुरोधों पर ट्रैफ़िक कम करता है
  • WebSocket — WebSocket प्रोटोकॉल के माध्यम से द्विदिश संचार समर्थन

OkHttp क्या है?

OkHttp Java, Android और Kotlin के लिए एक कुशल HTTP क्लाइंट है, जिसे Square कंपनी ने विकसित किया है। लाइब्रेरी HTTP/2, SPDY, WebSocket और नेटवर्क विफलताओं पर स्वचालित कनेक्शन पुनर्प्राप्ति के समर्थन के साथ HTTP अनुरोधों को निष्पादित करने के लिए निम्न-स्तरीय API प्रदान करती है।

OkHttp 2013 में एक विश्वसनीय HTTP क्लाइंट की आवश्यकता के जवाब में उभरा जो HttpURLConnection की समस्याओं को हल करता था — कनेक्शन पूल की कमी, कमज़ोर HTTP/2 समर्थन, और असुविधाजनक API। 2025 तक, OkHttp का उपयोग Android API सिस्टम स्तर पर किया जाता है: OkHttp Android 4.4 (API 19) से HttpURLConnection कार्यान्वयन में एम्बेडेड है।

Google I/O 2024 के अनुसार, OkHttp Android इकोसिस्टम में सभी HTTP अनुरोधों का 70% से अधिक संभालता है। यह संभव है क्योंकि OkHttp Retrofit, Apollo GraphQL, Firebase और कई अन्य लाइब्रेरियों के लिए ट्रांसपोर्ट लेयर के रूप में कार्य करता है। डेवलपर्स OkHttp की कार्यक्षमता स्वचालित रूप से प्राप्त करते हैं बिना इसे स्पष्ट रूप से जोड़े।

OkHttp कैसे काम करता है

OkHttp आर्किटेक्चर इंटरसेप्टर श्रृंखला पर बनाया गया है। प्रत्येक अनुरोध इंटरसेप्टर के अनुक्रम से गुज़रता है जो अनुरोध, प्रतिक्रिया को संशोधित कर सकता है या निष्पादन को रोक सकता है। यह आर्किटेक्चर Chain of Responsibility पैटर्न जैसा दिखता है और लचीली विस्तारशीलता की अनुमति देता है।

जब कोई एप्लिकेशन अनुरोध भेजता है, OkHttp निम्नलिखित चरण करता है: DNS हल करता है, पूल से कनेक्शन चुनता है (या नया बनाता है), TLS हैंडशेक खोलता है (यदि HTTPS है), HTTP अनुरोध भेजता है, प्रतिक्रिया प्राप्त करता है और इसे एप्लिकेशन को लौटाता है। RealCall आंतरिक वर्ग है जो निर्माण से पूर्णता तक अनुरोध के पूर्ण जीवनचक्र का प्रबंधन करता है।

OkHttp स्वचालित रूप से रीडायरेक्ट (302, 301) को संभालता है, नेटवर्क विफलताओं पर अनुरोधों को पुनः प्रयास करता है, keep-alive प्रोटोकॉल का पालन करता है, और पारदर्शी gzip संपीड़न का समर्थन करता है। डेवलपर को इन संचालनों के लिए कोड लिखने की आवश्यकता नहीं है — OkHttp उन्हें सर्वर हेडर के आधार पर स्वचालित रूप से करता है।

HTTP/2 समर्थन और मल्टीप्लेक्सिंग

HTTP/2 एक ही TCP कनेक्शन पर एक साथ कई अनुरोध भेजने की अनुमति देता है, बिना हेड-ऑफ-लाइन ब्लॉकिंग (HTTP/1.1 की विशेषता) के। OkHttp स्वचालित रूप से HTTP/2 का उपयोग करता है यदि सर्वर इसका समर्थन करता है, और आवश्यक होने पर पारदर्शी रूप से HTTP/1.1 पर वापस आ जाता है।

HTTP/2 मल्टीप्लेक्सिंग मोबाइल एप्लिकेशन के लिए विशेष रूप से महत्वपूर्ण है, जहाँ कनेक्शन स्थापना विलंबता (TCP + TLS) 100–300 मिलीसेकंड हो सकती है। 10 अनुक्रमिक कनेक्शनों के बजाय, OkHttp एक का उपयोग करता है, जो अस्थिर कनेक्शन वाले विशिष्ट Android उपकरणों पर कुल विलंबता को 40–60% तक कम करता है।

OkHttp इंटरसेप्टर: Interceptor और NetworkInterceptor

Interceptor एक एकल विधि intercept(Chain) वाला इंटरफ़ेस है, जो अनुरोध प्राप्त करता है, कार्रवाई करता है और प्रतिक्रिया लौटाता है। दो प्रकार के इंटरसेप्टर होते हैं: एप्लिकेशन इंटरसेप्टर (addInterceptor के माध्यम से जोड़े गए) और नेटवर्क इंटरसेप्टर (addNetworkInterceptor)।

एप्लिकेशन इंटरसेप्टर HTTP अनुरोध बनने से पहले सक्रिय होते हैं — वे मूल अनुरोध और सभी परिवर्तनों के बाद अंतिम प्रतिक्रिया देखते हैं। नेटवर्क इंटरसेप्टर नेटवर्क स्तर पर सक्रिय होते हैं: वे gzip संपीड़न, Content-Length हेडर जोड़ने, रीडायरेक्ट और पुनः प्रयास के बाद अनुरोध देखते हैं। यदि प्रतिक्रिया कैश से प्राप्त होती है तो नेटवर्क इंटरसेप्टर कॉल नहीं किए जाते हैं।

इंटरसेप्टर प्रकारजोड़ने की विधिकब कॉल किया जाता हैकैश देखता है
Application InterceptoraddInterceptor()अनुरोध से पहले और बाद मेंहाँ
Network InterceptoraddNetworkInterceptor()नेटवर्क स्तर परनहीं

इंटरसेप्टर का व्यावहारिक उपयोग

व्यवहार में, OkHttp इंटरसेप्टर तीन मुख्य कार्य हल करते हैं: प्राधिकरण (Authorization हेडर जोड़ना), लॉगिंग (डीबगिंग के लिए HttpLoggingInterceptor), और पुनः प्रयास (नेटवर्क विफलताओं पर स्वचालित अनुरोध पुनरावृत्ति)। कई इंटरसेप्टरों को मिलाकर, एप्लिकेशन के प्रत्येक HTTP कॉल में कोड दोहराए बिना एक पूर्ण अनुरोध प्रसंस्करण पाइपलाइन बनाई जा सकती है।

इंटरसेप्टर जोड़ने का क्रम मायने रखता है: पहले जोड़ा गया Interceptor प्रवेश पर पहले और निकास पर अंतिम निष्पादित होता है। NetworkInterceptor के लिए, क्रम नेटवर्क स्टैक द्वारा निर्धारित किया जाता है। अनुशंसित क्रम: AuthInterceptor (टोकन जोड़ता है), LoggingInterceptor (अनुरोध लॉग करता है), RetryInterceptor (विफलता पर पुनः प्रयास करता है)।

HttpLoggingInterceptor के माध्यम से लॉगिंग

नेटवर्क अनुरोधों को डीबग करने के लिए, HttpLoggingInterceptor का उपयोग किया जाता है — Square का एक तैयार इंटरसेप्टर। यह विधि, URL, हेडर और अनुरोध/प्रतिक्रिया निकाय को लॉग करता है। लॉगिंग स्तर: BASIC (विधि + URL + कोड), HEADERS (हेडर के साथ), और BODY (पूर्ण अनुरोध और प्रतिक्रिया)। BODY विकास के दौरान उपयोगी है लेकिन सुरक्षा और प्रदर्शन कारणों से उत्पादन में इसे अक्षम कर दिया जाता है।

Kotlin में OkHttp कोड उदाहरण

आइए OkHttp का उपयोग करके एक बुनियादी GET अनुरोध देखें। पहले, OkHttpClient बनाया जाता है — एक भारी ऑब्जेक्ट जो एक बार बनाया जाता है और पुनः उपयोग किया जाता है। फिर URL के साथ एक अनुरोध बनाया जाता है, और अनुरोध execute के माध्यम से समकालिक रूप से या enqueue के माध्यम से अतुल्यकालिक रूप से निष्पादित किया जाता है।

kotlin
val client = OkHttpClient.Builder()
    .connectTimeout(15, TimeUnit.SECONDS)
    .readTimeout(15, TimeUnit.SECONDS)
    .build()

val request = Request.Builder()
    .url("https://api.github.com/users/octocat")
    .header("Accept", "application/vnd.github.v3+json")
    .build()

val response = client.newCall(request).execute()
println(response.body()?.string())

अतुल्यकालिक निष्पादन के लिए, enqueue विधि का उपयोग किया जाता है, जो एक Callback स्वीकार करती है। OkHttp अनुरोध को पृष्ठभूमि थ्रेड में निष्पादित करता है और उसी थ्रेड पर कॉलबैक में परिणाम लौटाता है। Android मुख्य थ्रेड पर स्विच करने के लिए, Handler या कोरूटीन का उपयोग करें।

kotlin
client.newCall(request).enqueue(object : Callback {
    override fun onFailure(
        call: Call, e: IOException
    ) {
        println("अनुरोध विफल: ${e.message}")
    }

    override fun onResponse(
        call: Call, response: Response
    ) {
        println(response.body()?.string())
    }
})

प्राधिकरण के लिए इंटरसेप्टर जोड़ना

एक कस्टम Interceptor प्रत्येक अनुरोध में Bearer टोकन जोड़ता है। इंटरसेप्टर Authorization हेडर की उपस्थिति की जाँच करता है, और यदि टोकन अभी तक सेट नहीं है, तो इसे स्टोरेज से जोड़ता है। 401 प्रतिक्रिया पर, इंटरसेप्टर Authenticator के माध्यम से टोकन को रीफ़्रेश कर सकता है।

kotlin
class AuthInterceptor(
    private val tokenProvider: () -> String?
) : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        val originalRequest = chain.request()
        val token = tokenProvider.invoke()
        val request = originalRequest.newBuilder()
            .header("Authorization", "Bearer $token")
            .build()
        return chain.proceed(request)
    }
}

OkHttp में कनेक्शन पूल और कैशिंग

कनेक्शन पूल (ConnectionPool) OkHttp का एक मुख्य अनुकूलन है जो कई अनुरोधों के लिए TCP कनेक्शन के पुन: उपयोग की अनुमति देता है। प्रत्येक अनुरोध के लिए नया सॉकेट बनाने के बजाय, OkHttp 5 मिनट के लिए 5 निष्क्रिय कनेक्शन (डिफ़ॉल्ट रूप से) संग्रहीत करता है, जो उसी होस्ट के लिए बार-बार अनुरोधों पर विलंबता को 30–70% कम करता है।

प्रतिक्रिया कैशिंग Cache वर्ग के माध्यम से कार्यान्वित की जाती है। कैशिंग सक्षम करने के लिए, OkHttpClient.Builder में निर्देशिका और अधिकतम आकार निर्दिष्ट करें। OkHttp स्वचालित रूप से Cache-Control, Expires और ETag हेडर के अनुसार GET प्रतिक्रियाओं को कैश करता है, यदि वे पुरानी नहीं हैं तो बिना नेटवर्क अनुरोध के कैश किया गया डेटा लौटाता है।

kotlin
val cacheDir = File(context.cacheDir, "http-cache")
val cache = Cache(cacheDir, 10L * 1024 * 1024)

val client = OkHttpClient.Builder()
    .cache(cache)
    .connectionPool(ConnectionPool(5, 5, TimeUnit.MINUTES))
    .build()

पूल और कैश का उचित कॉन्फ़िगरेशन विशेष रूप से बार-बार अनुरोधों वाले एप्लिकेशन — समाचार फ़ीड, चैट, डेटा अपडेट — के लिए महत्वपूर्ण है। पूल के बिना, प्रत्येक TCP कनेक्शन को तीन-तरफ़ा हैंडशेक (SYN, SYN-ACK, ACK) और संभावित TLS हैंडशेक (2–3 राउंड ट्रिप) की आवश्यकता होती है, जो प्रत्येक अनुरोध में 100–500 मिलीसेकंड जोड़ता है।

OkHttp RealWebSocket वर्ग के माध्यम से WebSocket का भी समर्थन करता है। WebSocket कनेक्शन HTTP हैंडशेक (101 Switching Protocols) के माध्यम से स्थापित होता है और फिर द्विदिश प्रोटोकॉल पर स्विच करता है। OkHttp कनेक्शन को सक्रिय रखने के लिए स्वचालित रूप से ping फ्रेम भेजता है और डिस्कनेक्ट होने पर पुनः कनेक्ट होता है। OkHttp का WebSocket wss://echo.websocket.org जैसे मानक एंडपॉइंट के साथ संगत है।

OkHttp के साथ काम करते समय सामान्य गलतियाँ

प्रत्येक अनुरोध के लिए OkHttpClient बनाना सबसे आम गलती है। OkHttpClient में कनेक्शन पूल, कैश और थ्रेड पूल होता है। प्रत्येक अनुरोध के लिए नया इंस्टेंस बनाना न केवल मेमोरी बर्बाद करता है बल्कि कनेक्शन पुन: उपयोग के लाभ को भी खो देता है। OkHttpClient को DI कंटेनर के माध्यम से सिंगलटन होना चाहिए।

Response.body() को बंद करने की अनदेखी संसाधन रिसाव का कारण बनती है। ResponseBody में एक InputStream होता है जिसे पढ़ने के बाद बंद किया जाना चाहिए। यदि body().string() या body().bytes() का उपयोग किया जाता है, OkHttp स्ट्रीम को स्वचालित रूप से बंद कर देता है, लेकिन body().byteStream() या body().charStream() पढ़ते समय finally ब्लॉक में स्पष्ट close() कॉल की आवश्यकता होती है।

टाइमआउट हैंडलिंग का अभाव एक और समस्या है। डिफ़ॉल्ट रूप से, OkHttp में connectTimeout 10 सेकंड, readTimeout 10 सेकंड और writeTimeout 10 सेकंड है। अस्थिर कनेक्शन वाले मोबाइल एप्लिकेशन के लिए, connectTimeout 15–30 सेकंड और readTimeout 15–30 सेकंड सेट करने की अनुशंसा की जाती है, अन्यथा उपयोगकर्ता कमज़ोर सिग्नल के साथ बहुत देर तक प्रतीक्षा करेगा।

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

OkHttp Retrofit से कैसे अलग है?

OkHttp एक निम्न-स्तरीय HTTP क्लाइंट है जिसमें मैन्युअल अनुरोध और प्रतिक्रिया प्रबंधन है। Retrofit एनोटेशन के साथ एक उच्च-स्तरीय अमूर्तता है। OkHttp का उपयोग Retrofit के लिए ट्रांसपोर्ट लेयर के रूप में किया जाता है, लेकिन यह अतिरिक्त लाइब्रेरी के बिना स्वतंत्र रूप से भी काम कर सकता है।

OkHttp HTTPS को कैसे संभालता है?

OkHttp TLS हैंडशेक के लिए SSLSocketFactory का उपयोग करता है। लाइब्रेरी सर्टिफिकेट पिनिंग के लिए CertificatePinner, कस्टम वैलिडेशन के लिए TrustManager और सर्टिफिकेट के विरुद्ध होस्टनाम की जाँच के लिए HostnameVerifier का समर्थन करती है।

OkHttp में नेटवर्क त्रुटियाँ कैसे पकड़ें?

समकालिक अनुरोध नेटवर्क समस्याओं पर IOException फेंकते हैं। अतुल्यकालिक अनुरोधों को IOException के साथ onFailure कॉल प्राप्त होता है। HTTP त्रुटियों (4xx, 5xx) के लिए, प्रतिक्रिया सफल मानी जाती है — त्रुटि कोड response.isSuccessful() के माध्यम से जाँचा जाता है।

क्या OkHttp WebSocket का समर्थन करता है?

हाँ, OkHttp में WebSocket वर्ग और WebSocketListener के माध्यम से अंतर्निहित WebSocket समर्थन है। कनेक्शन स्थापित करने के बाद, WebSocket बार-बार HTTP अनुरोधों के बिना वास्तविक समय में संदेश भेजने और प्राप्त करने की अनुमति देता है।

OkHttp में रीडायरेक्ट कैसे अक्षम करें?

OkHttpClient.Builder में followRedirects(false) और followSslRedirects(false) के माध्यम से स्वचालित रीडायरेक्ट अक्षम करें। यह तब उपयोगी होता है जब आपको मैन्युअल रूप से रीडायरेक्ट संभालने की आवश्यकता होती है, उदाहरण के लिए, रीडायरेक्ट URL से टोकन निकालने के लिए।

सारांश

  • OkHttp — HTTP/2 और SPDY समर्थन के साथ Square का उच्च-प्रदर्शन HTTP क्लाइंट
  • इंटरसेप्टर आर्किटेक्चर अनुरोध संशोधन के लिए Chain of Responsibility लागू करता है
  • कनेक्शन पूल TCP कनेक्शन का पुन: उपयोग करता है, विलंबता को 30–70% कम करता है
  • कैशिंग Cache-Control और ETag बार-बार अनुरोधों पर ट्रैफ़िक कम करते हैं
  • WebSocket वास्तविक समय में द्विदिश संचार सक्षम करता है
  • OkHttpClient को सिंगलटन होना चाहिए — प्रति अनुरोध एक बनाने से रिसाव होता है
  • ResponseBody को byteStream के माध्यम से पढ़ते समय स्पष्ट समापन की आवश्यकता होती है

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

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

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

यह भी पढ़ें