सावधानी से रहना: Google Data API क्लाइंट लाइब्रेरी के साथ प्रॉक्सी सर्वर इस्तेमाल करना

जेफ़ फ़िशर, Google डेटा API टीम
जून 2007

परिचय: प्रॉक्सी क्यों ज़रूरी है?

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

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

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

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

Java

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

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

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

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

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

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

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);

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

.NET

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

उदाहरण के लिए, हो सकता है कि हम Google कैलेंडर सेवा से सहभागिता करने के लिए प्रॉक्सी का उपयोग करना चाहें:

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

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

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