Living Vicariously: Using Proxy Servers with the Google Data API Client Libraries

जेफ़ फ़िशर, Google Data APIs टीम
जून 2007

परिचय: प्रॉक्सी का इस्तेमाल क्यों किया जाता है?

प्रॉक्सी सर्वर एक कंप्यूटर (या कंप्यूटर पर मौजूद सेवा) होता है. यह क्लाइंट कंप्यूटर की ओर से अनुरोध करता है. आम तौर पर, यह बाहरी संसाधनों के लिए अनुरोध करता है. यह लेख, एचटीटीपी प्रॉक्सी सर्वर के बारे में है. ऐसा इसलिए, क्योंकि Google की वेब सेवाओं के लिए सार्वजनिक एपीआई को ऐक्सेस करने के लिए, एचटीटीपी प्रोटोकॉल का इस्तेमाल किया जाता है. इसी तरह, एचटीटीपी अनुरोध करते समय एचटीटीपीएस या एसएसएल प्रॉक्सी का इस्तेमाल करना भी फ़ायदेमंद होता है. इन अनुरोधों में संवेदनशील जानकारी शामिल होती है, जैसे कि उपयोगकर्ता का निजी डेटा या पासवर्ड. आजकल, कई बड़ी कंपनियां एचटीटीपी प्रॉक्सी का इस्तेमाल करती हैं. इससे वे यह कंट्रोल कर पाती हैं कि कर्मचारी इंटरनेट पर कौनसी वेबसाइटें या जानकारी देख सकते हैं. सार्वजनिक लाइब्रेरी और स्कूल भी इस मकसद के लिए प्रॉक्सी का इस्तेमाल करते हैं. सार्वजनिक तौर पर उपलब्ध कई प्रॉक्सी सर्वर भी हैं. इनका इस्तेमाल करके, वेब कॉन्टेंट को बिना अपनी पहचान बताए ऐक्सेस किया जा सकता है.

प्रॉक्सी सर्वर का इस्तेमाल करते समय आने वाली संभावित समस्याएं, इस बात पर निर्भर करती हैं कि कौनसा सॉफ़्टवेयर इस्तेमाल किया जा रहा है और उसे कैसे कॉन्फ़िगर किया गया है. किसी प्रॉक्सी को "पारदर्शी" तब माना जाता है, जब वह क्लाइंट के अनुरोध या सर्वर के जवाब में किसी भी तरह का बदलाव न करे. हालांकि, प्रॉक्सी की पहचान और पुष्टि करने के लिए बदलाव किया जा सकता है. हालांकि, कई प्रॉक्सी सर्वर अनुरोध या जवाब में ऐसे बदलाव करते हैं जिनके बारे में डेवलपर को पता होना चाहिए. खास तौर पर, कुछ प्रॉक्सी, रिस्पॉन्स के कॉन्टेंट-टाइप में बदलाव कर देंगी या रिसॉर्स को होस्ट करने वाले बाहरी सर्वर को भेजे जाने वाले एचटीटीपी कीप-अलाइव हेडर हटा देंगी.

इसलिए, डेवलपर एचटीटीपी या एसएसएल प्रॉक्सी का इस्तेमाल क्यों करना चाहेगा? आम तौर पर, ऐसा दो वजहों से होता है: कुछ कॉर्पोरेट इंफ़्रास्ट्रक्चर के लिए इसकी ज़रूरत होती है या डेवलपर, वेब सेवा का इस्तेमाल करने वाले किसी ऐप्लिकेशन को डीबग करना चाहता है. अगर डेवलपर जिस नेटवर्क पर काम कर रहा है उसके नियमों के मुताबिक, बाहरी वेबसाइटों से नॉन-प्रॉक्सी वेब या एसएसएल कनेक्शन की अनुमति नहीं है, तो पहली वजह को पूरी तरह से टाला नहीं जा सकता. दूसरी वजह के बारे में, हमारे सहायता फ़ोरम में डेवलपर अक्सर शिकायत करते हैं. ये डेवलपर, Google की वेब सेवा से जुड़ी समस्याओं को हल करने की कोशिश कर रहे होते हैं. Fiddler और Charles जैसे खास मकसद वाले "डीबग करने वाले" प्रॉक्सी टूल उपलब्ध हैं. ये टूल, इस समस्या को ठीक करने के लिए ही बनाए गए हैं. प्रॉक्सी सर्वर के इस इस्तेमाल के बारे में ज़्यादा जानकारी के लिए, हमारा लेख On the Wire: Tools for API Developers पढ़ें.

कुछ ऐप्लिकेशन के लिए, प्रॉक्सी सर्वर की सुविधा जोड़ना मुश्किल हो सकता है. अच्छी बात यह है कि Google Data API के लिए उपलब्ध ज़्यादातर क्लाइंट लाइब्रेरी को, कोड में कुछ बदलाव करके एचटीटीपी प्रॉक्सी सर्वर के साथ काम करने के लिए सेट अप किया जा सकता है. यह लेख उन डेवलपर के लिए है जो अपने ऐप्लिकेशन से किए गए वेब अनुरोधों के लिए, प्रॉक्सी सर्वर का इस्तेमाल करना चाहते हैं.

Java

Java क्लाइंट लाइब्रेरी के साथ HTTP प्रॉक्सी का इस्तेमाल करना आसान है. ऐसा इसलिए, क्योंकि Sun ने कनेक्शन सेटिंग मैनेज करने के लिए सिस्टम प्रॉपर्टी का इस्तेमाल किया है.

उदाहरण के लिए, अगर आपका कॉर्पोरेट प्रॉक्सी सर्वर "my.proxy.domain.com" पर पोर्ट 3128 पर चल रहा है, तो Google Calendar, Google Sheets वगैरह के लिए सेवा ऑब्जेक्ट बनाने से पहले, अपने कोड में यह जोड़ा जा सकता है.

System.setProperty("http.proxyHost", "my.proxy.domain.com");
System.setProperty("http.proxyPort", "3128");

इसके अलावा, सर्वलेट एनवायरमेंट शुरू करते समय, इसे कमांड लाइन पर भी किया जा सकता है:

java -Dhttp.proxyHost=my.proxy.domain.com -Dhttp.proxyPort=3128

JSSE पैकेज के नए वर्शन के साथ, इसे SSL प्रॉक्सी के लिए भी बढ़ाया जा सकता है. अगर पिछले उदाहरण में दिया गया प्रॉक्सी सर्वर, पोर्ट 3129 पर SSL प्रॉक्सी चला रहा है, तो ज़रूरी कोड यह होगा:

System.setProperty("https.proxyHost", "my.proxy.domain.com");
System.setProperty("https.proxyPort", "3129");

इसे कमांड लाइन से भी उसी तरह किया जा सकता है जिस तरह एचटीटीपी प्रॉक्सी के साथ किया जाता है.

कभी-कभी, प्रॉक्सी सर्वर का इस्तेमाल करने के लिए, आपको क्रेडेंशियल देने पड़ सकते हैं. आम तौर पर, इन्हें एचटीटीपी हेडर में शामिल किए गए base64 हैश का इस्तेमाल करके सबमिट किया जाता है. जैसे:

String encoded = new String(Base64.encodeBase64(new String("username:password").getBytes()));
String base64encodedCredentials = "Basic " + encoded;
myService.getRequestFactory().setPrivateHeader("Proxy-Authorization", base64encodedCredentials);

ध्यान दें कि ऊपर दिए गए कोड में, ज़रूरी base64 एन्कोडिंग करने के लिए Apache Commons Codec पैकेज का इस्तेमाल किया गया है. ऊपर दिए गए कोड को चलाने के लिए, आपको org.apache.commons.codec.binary.Base64 क्लास को इंपोर्ट करना होगा.

.NET

.NET क्लाइंट लाइब्रेरी के साथ एचटीटीपी प्रॉक्सी का इस्तेमाल करना, Java क्लाइंट के साथ इस्तेमाल करने जितना आसान नहीं है. हालांकि, किसी खास प्रॉडक्ट के लिए सेवा ऑब्जेक्ट बनाते समय, इसे उसी तरह से पूरा किया जा सकता है.

उदाहरण के लिए, Google Calendar सेवा के साथ इंटरैक्ट करने के लिए, हमें प्रॉक्सी का इस्तेमाल करना पड़ सकता है:

using System.Net;

CalendarService service = new CalendarService("CalendarSampleApp");
query.Uri = new Uri(calendarURI);
GDataRequestFactory requestFactory = (GDataRequestFactory) service.RequestFactory;
IWebProxy iProxy = WebRequest.DefaultWebProxy;
WebProxy myProxy = new WebProxy(iProxy.GetProxy(query.Uri));
// potentially, setup credentials on the proxy here
myProxy.Credentials = CredentialCache.DefaultCredentials;
myProxy.UseDefaultCredentials = true;
requestFactory.Proxy = myProxy;

इससे, इंटरनेट कनेक्शन की सेटिंग से ज़रूरी प्रॉक्सी का पता चल जाएगा. यह .NET लाइब्रेरी की एक बेहतरीन सुविधा है. हालांकि, अगर आपको इस पर भरोसा नहीं है कि यह प्रॉक्सी को सही तरीके से ढूंढ पाएगा, तो कोड को बदलकर इसे भी सेट किया जा सकता है:

using System.Net;

CalendarService service = new CalendarService("CalendarSampleApp");
GDataRequestFactory requestFactory = (GDataRequestFactory) service.RequestFactory;
WebProxy myProxy = new WebProxy("http://my.proxy.example.com:3128/",true);
// potentially, setup credentials on the proxy here
myProxy.Credentials = CredentialCache.DefaultCredentials;
myProxy.UseDefaultCredentials = true;
requestFactory.Proxy = myProxy;

नतीजा

इस लेख में बताया गया है कि Google Data API की कुछ क्लाइंट लाइब्रेरी, एचटीटीपी प्रॉक्सी सर्वर के साथ कैसे काम करती हैं. नेटवर्क की नीति के तहत, प्रॉक्सी सर्वर का इस्तेमाल करने वाले डेवलपर अब भी इन लाइब्रेरी का इस्तेमाल कर सकते हैं. डेवलपर, प्रॉक्सी सर्वर का इस्तेमाल करके भी अपने कोड को डीबग कर सकते हैं. इसके लिए, प्रॉक्सी सर्वर को यह निर्देश दिया जाता है कि वह Google की वेब सेवा को भेजे जाने वाले और उससे मिलने वाले एचटीटीपी अनुरोधों और रिस्पॉन्स के कॉन्टेंट को रिकॉर्ड करे. प्रॉक्सी सर्वर और अन्य क्लाइंट लाइब्रेरी के इस्तेमाल के कुछ और उदाहरण भी हैं. हालांकि, इस ट्यूटोरियल में उनके बारे में नहीं बताया गया है. जिन डेवलपर को ज़्यादा मदद चाहिए वे यहां दिए गए हमारे सार्वजनिक सहायता ग्रुप में शामिल हों.

इस लेख में इस्तेमाल की गई क्लाइंट लाइब्रेरी के बारे में ज़्यादा जानने के लिए, इन पेजों पर जाएं:

अन्‍य संसाधन: