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

جيف فيشر، فريق Google Data APIs
يونيو 2007

مقدمة: ما هي الخوادم الوكيلة؟

خادم الوكيل هو جهاز كمبيوتر (أو خدمة على جهاز كمبيوتر) يقدّم طلبات لعدد من أجهزة الكمبيوتر الخاصة بالعملاء نيابةً عنهم، وعادةً ما يكون ذلك للموارد الخارجية. تتناول هذه المقالة خوادم وكيل HTTP لأنّ HTTP هو البروتوكول المستخدَم للوصول إلى واجهات برمجة التطبيقات العامة لخدمات Google على الويب. وبالتالي، فإنّ خوادم وكيل HTTPS أو SSL تهمّ أيضًا عند تقديم طلبات HTTP تحتوي على معلومات حساسة، مثل بيانات المستخدم الخاصة أو كلمات المرور. تستخدم العديد من الشركات الكبيرة اليوم خوادم وكيل HTTP للتحكّم في المواقع الإلكترونية أو المعلومات التي يمكن للموظفين الاطّلاع عليها على الإنترنت. وقد تستخدم المكتبات العامة والمدارس أيضًا خوادم وكيل لهذا الغرض. هناك أيضًا عدد من خوادم الوكيل المتاحة للجميع والتي يمكن استخدامها للوصول إلى محتوى الويب بدون الكشف عن الهوية.

تعتمد المشاكل المحتملة التي تواجهها عند استخدام خادم وكيل على البرنامج المستخدَم وكيفية إعداده. يُعدّ الوكيل "شفافًا" إذا لم يغيّر الطلب من العميل أو الاستجابة من الخادم بأي طريقة أخرى غير ضرورية لتحديد هوية الوكيل والمصادقة عليه. ومع ذلك، يغيّر عدد كبير من خوادم البروكسي الطلب أو الرد بطرق يجب أن يكون المطوّر على دراية بها. على وجه الخصوص، ستغيّر بعض الخوادم الوكيلة نوع المحتوى في الاستجابة أو ستزيل عناوين HTTP keep-alive من الإرسال إلى الخادم الخارجي الذي يستضيف المورد.

إذًا، لماذا قد يريد المطوّر استخدام خادم وكيل HTTP أو SSL؟ بشكل عام، هناك سببان لذلك: إما أن يكون ذلك مطلوبًا من خلال بعض البنى الأساسية للشركات، أو أن يريد المطوّر تصحيح أخطاء تطبيق يستخدم خدمة ويب. السبب الأول لا يمكن تجنّبه تمامًا إذا كانت قواعد الشبكة التي يعمل عليها المطوّر تحظر اتصالات الويب أو بروتوكول SSL غير الوكيلة بالمواقع الإلكترونية الخارجية. ويتم الإبلاغ عن السبب الأخير بشكل متكرر في منتديات الدعم من قِبل المطوّرين الذين يحاولون تحديد المشاكل وحلّها عند التعامل مع إحدى خدمات الويب من Google. تتوفّر خوادم وكيل "لتصحيح الأخطاء" ذات أغراض خاصة، مثل Fiddler وCharles، وهي مصمّمة خصيصًا لهذا النوع من الحالات. لمزيد من المعلومات حول استخدام خادم وكيل، يمكنك قراءة مقالتنا On the Wire: Tools for API Developers.

بالنسبة إلى بعض التطبيقات، قد يكون من الصعب إضافة ميزة التوافق مع خادم وكيل. لحسن الحظ، يمكن تعديل معظم مكتبات برامج Google Data API بشكل طفيف لتتوافق مع خادم وكيل HTTP. تهدف هذه المقالة إلى أن تكون نقطة بداية للمطوّرين الذين يريدون استخدام خادم وكيل لطلبات الويب التي يقدّمها تطبيقهم.

Java

يسهل استخدام خادم وكيل HTTP مع مكتبة برامج Java للعميل بفضل استخدام Sun لخصائص النظام من أجل إدارة إعدادات الاتصال.

على سبيل المثال، إذا كان خادم وكيل شركتك يعمل على "my.proxy.domain.com"، على المنفذ 3128، يمكنك إضافة ما يلي إلى الرمز قبل إنشاء عنصر خدمة لـ "تقويم Google" و"جداول بيانات Google" وما إلى ذلك.

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

يمكن إجراء ذلك أيضًا في سطر الأوامر عند بدء بيئة servlet:

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

باستخدام الإصدارات الأحدث من حزمة JSSE، يمكن توسيع نطاق ذلك ليشمل خوادم وكيل SSL أيضًا. إذا كان خادم البروكسي نفسه في المثال السابق يشغّل بروكسي SSL على المنفذ 3129، سيكون الرمز اللازم هو:

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

يمكن إجراء ذلك أيضًا من سطر الأوامر بالطريقة نفسها كما هو الحال مع خادم وكيل HTTP.

في بعض الأحيان، قد تحتاج إلى تقديم بيانات اعتماد إلى خادم وكيل لاستخدامه. عادةً، يتم إرسالها باستخدام تجزئة base64 مضمّنة في عنوان HTTP، على النحو التالي:

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

يُرجى العِلم أنّ الرمز البرمجي أعلاه يستخدم حزمة Apache Commons Codec لإجراء ترميز base64 اللازم. عليك استيراد الفئة org.apache.commons.codec.binary.Base64 لتشغيل الرمز أعلاه.

NET.

لا يمكن استخدام خادم وكيل HTTP مع مكتبة عميل ‎ .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 Data API مع خادم وكيل HTTP. سيظل بإمكان المطوّرين الذين يعملون من خلال خادم وكيل تفرضه سياسة الشبكة استخدام هذه المكتبات. يمكن للمطوّرين أيضًا استخدام خادم وكيل للمساعدة في تصحيح أخطاء الرمز البرمجي من خلال جعل الخادم الوكيل يسجّل محتوى طلبات واستجابات HTTP التي يتم إرسالها إلى خدمة ويب من Google واستلامها منها. هناك حالات استخدام أكثر تقدّمًا لخادم وكيل ومكتبات عملاء أخرى لا يغطيها هذا البرنامج التعليمي. ننصح المطوّرين الذين يحتاجون إلى مساعدة إضافية بالمشاركة في مجموعات الدعم العامة المرتبطة أدناه.

للحصول على معلومات إضافية عن مكتبات البرامج المستخدَمة في هذه المقالة، يُرجى الانتقال إلى الصفحات التالية:

مَراجع أخرى: