Living Vicariously: استفاده از سرورهای پروکسی با Google Data API Client Libraries

جف فیشر، تیم Google Data APIs
ژوئن 2007

مقدمه: چرا پروکسی؟

سرور پروکسی کامپیوتری (یا سرویسی در رایانه) است که از طرف آنها برای تعدادی از رایانه های مشتری درخواست می کند، معمولاً به منابع خارجی. این مقاله به سرورهای پراکسی HTTP مربوط می شود زیرا HTTP پروتکلی است که برای دسترسی به APIهای عمومی سرویس های وب Google استفاده می شود. با گسترش، پروکسی های HTTPS یا SSL نیز هنگام درخواست HTTP که حاوی اطلاعات حساسی مانند داده های کاربر خصوصی یا گذرواژه است، مورد توجه هستند. امروزه بسیاری از شرکت های بزرگ از پروکسی های HTTP برای کنترل وب سایت ها یا اطلاعاتی که کارمندان می توانند در اینترنت مشاهده کنند استفاده می کنند. کتابخانه‌های عمومی و مدارس نیز برای این منظور پروکسی‌هایی را اجرا می‌کنند. همچنین تعدادی از سرورهای پراکسی در دسترس عموم وجود دارد که می توان از آنها برای دسترسی ناشناس به محتوای وب استفاده کرد.

مشکلات بالقوه ای که هنگام استفاده از سرور پراکسی با آن مواجه می شوند به نرم افزار مورد استفاده و نحوه پیکربندی آن بستگی دارد. یک پروکسی "شفاف" در نظر گرفته می شود که درخواست مشتری یا پاسخ سرور را به هیچ وجه به غیر از اینکه برای شناسایی و احراز هویت پروکسی ضروری است تغییر ندهد. با این حال، تعداد زیادی از سرورهای پروکسی یا درخواست یا پاسخ را به روشی تغییر می دهند که یک توسعه دهنده باید از آن آگاه باشد. به طور خاص، پراکسی‌های خاصی نوع محتوای پاسخ را تغییر می‌دهند یا هدرهای HTTP را از ارسال به سرور خارجی میزبان منبع حذف می‌کنند.

پس چرا یک توسعه دهنده می خواهد از پروکسی HTTP یا SSL استفاده کند؟ به طور کلی، دو دلیل برای این وجود دارد: برخی از زیرساخت‌های شرکت به آن نیاز دارند، یا توسعه‌دهنده می‌خواهد برنامه‌ای را که از یک وب سرویس استفاده می‌کند، اشکال زدایی کند. اگر قوانین شبکه ای که توسعه دهنده روی آن کار می کند، اتصال وب غیر پروکسی یا SSL به وب سایت های خارجی را ممنوع کند، دلیل اول کاملاً اجتناب ناپذیر است. دلیل دوم اغلب در تالارهای گفتمان پشتیبانی ما توسط توسعه دهندگانی که سعی در عیب یابی مشکلات هنگام کار با سرویس وب Google دارند گزارش می شود. پروکسی‌های «اشکال‌زدایی» ویژه‌ای مانند Fiddler و Charles وجود دارند که دقیقاً برای این وضعیت طراحی شده‌اند. برای اطلاعات بیشتر در مورد این استفاده از سرور پراکسی، ممکن است بخواهید مقاله ما را در مورد سیم: ابزارهایی برای توسعه دهندگان API بخوانید.

برای برخی از برنامه ها، افزودن پشتیبانی از سرور پروکسی می تواند دشوار باشد. خوشبختانه، اکثر کتابخانه های سرویس گیرنده برای API داده های Google می توانند با یک سرور پراکسی HTTP پس از تغییرات جزئی کد کار کنند. این مقاله به عنوان نقطه شروعی برای توسعه‌دهنده‌ای است که می‌خواهد از یک سرور پراکسی برای درخواست‌های وب ارائه شده توسط برنامه خود استفاده کند.

جاوا

استفاده از پروکسی HTTP با کتابخانه سرویس گیرنده جاوا به لطف استفاده Sun از ویژگی های سیستم برای مدیریت تنظیمات اتصال آسان است.

به عنوان مثال، اگر سرور پروکسی شرکت شما در "my.proxy.domain.com"، در پورت 3128 در حال اجرا بود، می توانید موارد زیر را قبل از ایجاد یک شیء سرویس برای Google Calendar، Google Spreadsheets و غیره به کد خود اضافه کنید.

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 به منظور انجام کدگذاری base64 لازم استفاده می کند. برای اجرای کد بالا باید کلاس org.apache.commons.codec.binary.Base64 را وارد کنید.

.خالص

استفاده از پروکسی HTTP با کتابخانه کلاینت دات نت به اندازه کلاینت جاوا بی اهمیت نیست، اما می توان آن را به روشی مشابه هنگام ایجاد شیء سرویس برای یک محصول خاص انجام داد.

برای مثال، ممکن است بخواهیم از یک پروکسی برای تعامل با سرویس 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;

این باید پروکسی لازم را از تنظیمات اتصال اینترنت شما شناسایی کند - یکی از ویژگی های خوب کتابخانه دات نت. با این حال، اگر به آن اطمینان ندارید که پروکسی را به درستی کشف کند، می توانید آن را با تغییر کد به:

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 را ضبط می‌کند. موارد استفاده پیشرفته تری از سرور پروکسی و سایر کتابخانه های سرویس گیرنده وجود دارد که تحت پوشش این آموزش نیستند. توسعه دهندگانی که به کمک بیشتری نیاز دارند تشویق می شوند تا در گروه های پشتیبانی عمومی ما که در زیر پیوند داده شده اند شرکت کنند.

برای اطلاعات بیشتر در مورد کتابخانه های مشتری مورد استفاده در این مقاله، از صفحات زیر دیدن کنید:

سایر منابع: