الحياة المباشرة: استخدام الخوادم الوكيلة مع مكتبات برامج Google Data API

جيف فيشر، فريق Google Data APIs
حزيران (يونيو) 2007

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

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

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

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

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

لغة Java

يعد استخدام خادم وكيل HTTP مع مكتبة عميل جافا أمرًا سهلاً بفضل استخدام 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 عبر المنفذ 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 .ليس بالسهولة نفسها التي يحدث بها استخدام برنامج جافا، ولكن يمكن تحقيقه بطريقة مماثلة عند إنشاء كائن الخدمة لمنتج معين.

على سبيل المثال، قد نحتاج إلى استخدام خادم وكيل للتفاعل مع خدمة "تقويم 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 وتلقيها منها. وهناك حالات استخدام أكثر تقدمًا للخادم الوكيل ومكتبات العميل الأخرى التي لا يتضمنها هذا البرنامج التعليمي. ويتم تشجيع مطوّري البرامج الذين يحتاجون إلى مساعدة إضافية على المشاركة في مجموعات الدعم العامة التابعة لنا والمدرجة أدناه.

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

موارد أخرى: