יוני 2007
מבוא: למה כדאי להשתמש בשרת proxy?
שרת proxy הוא מחשב (או שירות במחשב) שמבצע בקשות בשם מספר מחשבי לקוח, בדרך כלל למשאבים חיצוניים. במאמר הזה נתייחס לשרתי proxy מסוג HTTP, כי HTTP הוא הפרוטוקול שמשמש לגישה לממשקי ה-API הציבוריים של שירותי האינטרנט של Google. בנוסף, פרוקסי HTTPS או SSL מעניינים גם כשמבצעים בקשות HTTP שמכילות מידע רגיש כמו נתונים פרטיים של משתמשים או סיסמאות. הרבה חברות גדולות משתמשות כיום בשרתי proxy של HTTP כדי לשלוט באתרים או במידע שהעובדים יכולים לראות באינטרנט. ספריות ציבוריות ובתי ספר גם ידועים בהטמעה של שרתי proxy למטרה הזו. יש גם מספר שרתי proxy שזמינים לציבור ואפשר להשתמש בהם כדי לגשת לתוכן באינטרנט באופן אנונימי.
בעיות פוטנציאליות שעלולות לקרות כשמשתמשים בשרת proxy תלויות בתוכנה שבה משתמשים ובאופן ההגדרה שלה. שרת proxy נחשב ל "שקוף" אם הוא לא משנה את הבקשה מהלקוח או את התגובה מהשרת בשום צורה, מלבד השינויים שנדרשים לזיהוי ולאימות של ה-proxy. עם זאת, מספר גדול של שרתי proxy משנים את הבקשה או את התגובה בדרכים שמפתח צריך להיות מודע להן. בפרט, פרוקסי מסוימים ישנו את סוג התוכן של התגובה או יסירו כותרות של HTTP keep-alive כך שלא יישלחו לשרת החיצוני שמארח את המשאב.
אז למה מפתח ירצה להשתמש ב-proxy מסוג HTTP או SSL? בדרך כלל יש שתי סיבות לכך: זה נדרש על ידי תשתית ארגונית מסוימת, או שהמפתח רוצה לנפות באגים באפליקציה שמשתמשת בשירות אינטרנט. הסיבה הראשונה היא בלתי נמנעת לחלוטין אם הכללים של הרשת שבה המפתח עובד אוסרים על חיבורי אינטרנט או SSL לא מוצפנים לאתרים חיצוניים. הסיבה השנייה מופיעה לעיתים קרובות בפורומי התמיכה שלנו, כשמפתחים מנסים לפתור בעיות שקשורות לשירות אינטרנט של Google. יש כלי Proxy לניפוי באגים למטרה ספציפית, כמו Fiddler ו-Charles, שמתאימים בדיוק למצב הזה. למידע נוסף על השימוש הזה בשרת proxy, מומלץ לקרוא את המאמר On the Wire: Tools for API Developers.
יכול להיות שיהיה קשה להוסיף תמיכה בשרת proxy לחלק מהאפליקציות. למרבה המזל, אפשר לגרום לרוב ספריות הלקוח של Google Data API לעבוד עם שרת proxy מסוג HTTP אחרי כמה שינויים קלים בקוד. המאמר הזה מיועד לשמש כנקודת התחלה למפתחים שרוצים להשתמש בשרת proxy לבקשות אינטרנט שנשלחות מהאפליקציה שלהם.
Java
קל להשתמש בשרת proxy של HTTP עם ספריית הלקוח של Java, הודות לשימוש של Sun במאפייני מערכת לניהול הגדרות החיבור.
לדוגמה, אם שרת ה-proxy של החברה פועל בכתובת my.proxy.domain.com ביציאה 3128, אפשר להוסיף את הקוד הבא לפני שיוצרים אובייקט שירות ל-Google Calendar, ל-Google Sheets וכו'.
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, אפשר להרחיב את זה גם לשרתי proxy של SSL. אם אותו שרת proxy בדוגמה הקודמת הפעיל proxy של SSL ביציאה 3129, הקוד הנדרש יהיה:
System.setProperty("https.proxyHost", "my.proxy.domain.com"); System.setProperty("https.proxyPort", "3129");
אפשר לעשות את זה גם משורת הפקודה, באותו אופן כמו עם שרת ה-proxy של HTTP.
לפעמים צריך לספק פרטי כניסה לשרת proxy כדי להשתמש בו. בדרך כלל, הם נשלחים באמצעות גיבוב 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
השימוש בשרת proxy של HTTP עם ספריית הלקוח של .NET הוא לא פשוט כמו השימוש בו עם ספריית הלקוח של Java, אבל אפשר לעשות את זה בצורה דומה כשיוצרים את אובייקט השירות למוצר מסוים.
לדוגמה, יכול להיות שנרצה להשתמש ב-proxy כדי ליצור אינטראקציה עם שירות יומן 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;
הספרייה אמורה לזהות את ה-Proxy הנדרש מתוך הגדרות החיבור לאינטרנט – תכונה שימושית של ספריית .NET. עם זאת, אם אתם לא בוטחים בו שיגלה את ה-Proxy בצורה נכונה, אתם יכולים גם להגדיר אותו על ידי שינוי הקוד ל:
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 עם שרת proxy של HTTP. מפתחים שעובדים מאחורי שרת proxy שמוגדר על ידי מדיניות הרשת עדיין יכולים להשתמש בספריות האלה. מפתחים יכולים גם להשתמש בשרת proxy כדי לנפות באגים בקוד שלהם. לשם כך, הם יכולים להגדיר את שרת ה-proxy כך שיתעד את התוכן של בקשות ותגובות HTTP שנשלחות אל שירות אינטרנט של Google וממנו. יש תרחישי שימוש מתקדמים יותר בשרת proxy ובספריות לקוח אחרות שלא מוסברים במדריך הזה. מפתחים שזקוקים לעזרה נוספת מוזמנים להצטרף לקבוצות התמיכה הציבוריות שלנו שמפורטות בקישורים שלמטה.
מידע נוסף על ספריות הלקוח שמוזכרות במאמר הזה זמין בדפים הבאים:
משאבים נוספים:
- קבוצת התמיכה של Google Data APIs
- דף ויקי עם מבוא ל-Objective-C – הסבר קצר על תפיסת שגיאות משרת proxy ואימות באמצעות תיבת דו-שיח למשתמש.