חיזוק: שימוש בשרתי proxy באמצעות ספריות הלקוח של Google Data API

ג'ף פישר, צוות Google Data APIs
יוני 2007

מבוא: למה שרת proxy?

שרת proxy הוא מחשב (או שירות במחשב) ששולח בקשות למספר מחשבי לקוח בשמם, בדרך כלל למשאבים חיצוניים. המאמר הזה עוסק בשרתי proxy של HTTP, מפני ש-HTTP הוא הפרוטוקול המשמש לגישה לממשקי ה-API הציבוריים של שירותי האינטרנט של Google. בנוסף, שרתי proxy מסוג HTTPS או SSL מעניינים גם אותם כאשר שולחים בקשות HTTP המכילות מידע רגיש, כמו נתוני משתמש או סיסמאות פרטיים. כיום, חברות גדולות רבות משתמשות בשרתי proxy של HTTP כדי לשלוט באתרים או במידע שהעובדים יכולים להציג באינטרנט. ספריות ציבוריות ובתי ספר ידועים גם משתמשים בשרתי proxy למטרה זו. יש גם מספר שרתי proxy הזמינים לציבור ויכולים לשמש לגישה אנונימית לתוכן אינטרנט.

בעיות פוטנציאליות שעשויות להתרחש בעת שימוש בשרת proxy תלויות בתוכנה שבה נעשה שימוש ובאופן ההגדרה שלה. שרת proxy נחשב ל"שקוף" אם הוא לא משנה את הבקשה מהלקוח או את התגובה מהשרת בצורה שאינה הכרחית לזיהוי ולאימות של שרת proxy. עם זאת, מספר גדול של שרתי proxy לא משנים את הבקשה או את התגובה בדרכים שהמפתח צריך להיות מודע להן. באופן ספציפי, שרתי proxy מסוימים ישנו את סוג התוכן של התגובה או יבטלו את השליחה של כותרות keep-alive מסוג HTTP לשרת החיצוני שמארח את המשאב.

אם כך, למה כדאי למפתחים להשתמש בשרת proxy או HTTP? באופן כללי, יש שתי סיבות לכך: זה נדרש בתשתית ארגונית כלשהי, או שהמפתח רוצה לאתר באגים באפליקציה שמשתמשת בשירות אינטרנט. הסיבה הראשונה היא בלתי נמנעת לחלוטין, אם הכללים לרשת שהמפתח עובד עליה אוסרים על חיבור אינטרנט ללא שרת proxy או SSL אל אתרים חיצוניים. הסיבה השנייה מדווחת לעיתים קרובות בפורומים של התמיכה, על ידי מפתחים שמנסים לפתור בעיות הקשורות לשירות אינטרנט של Google. יש שרתי proxy שנועדו "לניפוי באגים", כמו Fiddler ו-Charles, שמיועדים בדיוק למצב הזה. למידע נוסף על השימוש הזה בשרת proxy, כדאי לקרוא את המאמר שלנו על החוט: כלים למפתחי API.

בחלק מהאפליקציות קשה להוסיף תמיכה בשרת proxy. למזלנו, אפשר לשנות את רוב ספריות הלקוח ב-Google Data API כדי לעבוד עם שרת proxy של HTTP אחרי כמה שינויים קלים בקוד. המאמר הזה נועד לשמש כנקודת התחלה למפתחים שרוצים להשתמש בשרת proxy לבקשות אינטרנט שנשלחו על ידי האפליקציה שלהם.

Java

קל להשתמש בשרת proxy מסוג HTTP עם ספריית הלקוח Java, הודות לשימוש של סן במאפייני המערכת לניהול הגדרות החיבור.

לדוגמה, אם שרת ה-proxy של הארגון פעל ב-"my.proxy.domain.com", ביציאה 3128, תוכל להוסיף את הקוד הבא לקוד לפני יצירת אובייקט שירות עבור יומן Google, Google Sheets וכו'.

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

לחלופין, ניתן לעשות זאת בשורת הפקודה בעת הפעלת סביבת השירות:

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

עם גרסאות עדכניות יותר של חבילת JSSE, ניתן להרחיב גם לשרתי proxy. אם אותו שרת proxy בדוגמה הקודמת הפעיל את שרת ה-SSL של היציאה ביציאה 3129, הקוד הנדרש יהיה:

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

ניתן לעשות זאת גם דרך שורת הפקודה באותו אופן כמו זה של שרת ה-HTTP Proxy.

לפעמים צריך לספק פרטי כניסה לשרת proxy כדי להשתמש בו. הם נשלחים בדרך כלל באמצעות גיבוב (hash) של 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 וספריות לקוח אחרות שלא כלולות במדריך הזה. אנחנו ממליצים למפתחים שזקוקים לעזרה נוספת להשתתף בקבוצות התמיכה הציבוריות שקישורים אליהן מופיעים בהמשך.

מידע נוסף על ספריות הלקוח המשמשות במאמר זה זמין בדפים הבאים:

משאבים נוספים: