מזהה אזור
REGION_ID הוא קוד מקוצר ש-Google מקצה על סמך האזור שבוחרים כשיוצרים את האפליקציה. הקוד לא תואם למדינה או למחוז, למרות שחלק ממזהי האזורים עשויים להיראות דומים לקודים נפוצים של מדינות ומחוזות. באפליקציות שנוצרו אחרי פברואר 2020, המחרוזת REGION_ID.r כלולה בכתובות ה-URL של App Engine. באפליקציות קיימות שנוצרו לפני התאריך הזה, מזהה האזור הוא אופציונלי בכתובת ה-URL.
בדף הזה מוסבר איך לשלוח בקשות HTTP(S) מאפליקציית App Engine באמצעות שירות אחזור של כתובות אתרים לדור השני של סביבות זמן ריצה.
לפני שמבצעים את ההוראות בדף הזה, מומלץ להשתמש בפתרונות אידיומטיים של שפה כדי לשלוח בקשות HTTP(S) לפני השימוש בשירות URL Fetch. תרחיש השימוש העיקרי בשירות URL Fetch הוא כשרוצים לשלוח בקשות HTTP(S) לאפליקציית App Engine אחרת ולאשר את זהות האפליקציה בבקשה הזו.
לפרטים על מגבלות גודל הבקשות ועל הכותרות שנשלחות בבקשת URL Fetch, אפשר לעיין במאמר בנושא בקשות יוצאות.
כברירת מחדל, אפליקציות שפועלות בסביבת זמן הריצה של Java משתמשות במחלקות Java רגילות לבקשות HTTP(S), כמוjava.net.HttpURLConnection. שולחים בקשות כמו בכל אפליקציית Java אחרת.
שימוש במחלקות רשת רגילות של זמן ריצה
אם משתמשים במחלקות הרשת הרגילות של Java, לאפליקציה תהיה גישה לתכונות הבאות:
- המגבלה של 32MB על נתוני הבקשה לא חלה.
- תמיכה ב-HTTP 2.0.
- תומך בכל ממשקי ה-API שמבוססים על Google Cloudשאפשר לגשת אליהם מ-Cloud Client Libraries for Java.
שימוש בשירות אחזור של כתובות אתרים
אם אתם צריכים להשתמש ב-URL Fetch באפליקציית Java, מוסיפים את השורה הבאה לקובץ appengine-web.xml:
<url-stream-handler>urlfetch</url-stream-handler>
לדוגמה:
<xml version="1.0" encoding="utf-8">
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<!-- ... -->
<url-stream-handler>urlfetch</url-stream-handler>
<!-- ... -->
</appengine-web-app>
שליחת בקשת HTTP
כדי להשתמש בשירות אחזור של כתובות אתרים כדי להנפיק בקשות HTTP(S) יוצאות, צריך להשתמש ב-java.net.URLConnection.
בקטע הקוד הבא אפשר לראות איך מבצעים בקשת HTTP GET בסיסית.
האפליקציה יוצרת אובייקט URL חדש, ואז קוראת לשיטה openStream() של האובייקט כדי לאחזר את התוכן בכתובת ה-URL הזו:
לבקשות מתקדמות יותר, משתמשים ב-java.net.HttpURLConnection באופן הבא:
- יצירת אובייקט
URLחדש. - יוצרים אובייקט
URLConnectionחדש על ידי קריאה לשיטהopenConnection()של האובייקטURL. - יוצרים אובייקט
HttpURLConnectionחדש על ידי המרת האובייקטURLConnectionלסוג האובייקטHttpURLConnection. - מגדירים את שיטת הבקשה של האובייקט
HttpURLConnection. - יוצרים זרם פלט לבקשה.
- כותבים את מטען הבקשה לזרם.
- סוגרים את השידור.
קטע הקוד הבא מדגים איך להשתמש ב-HttpURLConnection כדי לבצע בקשה מתקדמת יותר, ולשלוח נתונים מטופס אינטרנט באמצעות בקשת PUT:
הגדרת זמן קצוב לתפוגת בקשה
אם אתם משתמשים ב-URL Fetch, אתם יכולים לשנות את מועד היעד שמוגדר כברירת מחדל לבקשות באמצעות ההגדרה appengine.api.urlfetch.defaultDeadline בקובץ appengine-web.xml.
הגדרת כותרות
אם אתם משתמשים ב-URL Fetch, אתם יכולים להגדיר כותרת HTTP בבקשה היוצאת על ידי קריאה לשיטה setRequestProperty() של האובייקט HttpURLConnection. בקטע הקוד הבא מוגדרת הכותרת X-MyApp-Version לערך 2.7.3:
conn.setRequestProperty("X-MyApp-Version", "2.7.3");
השבתת ההפניות האוטומטיות
כברירת מחדל,HttpURLConnection עוקב אחרי הפניות אוטומטיות מסוג HTTP.
אם אתם משתמשים ב-URL Fetch, שירות אחזור של כתובות אתרים הבסיסי עוקב אחרי עד חמש הפניות אוטומטיות כברירת מחדל. ההפניות האלה יכולות להעביר מידע רגיש, כמו כותרות הרשאה, ליעד שאליו מתבצעת ההפניה מחדש. אם האפליקציה לא דורשת הפניות אוטומטיות של HTTP, מומלץ להשבית את ההפניות האוטומטיות.
כדי להשבית את ההתנהגות הזו, מעבירים את הערך false לשיטה setInstanceFollowRedirects() של האובייקט HttpURLConnection:
conn.setInstanceFollowRedirects(false);
אם האפליקציה משתמשת בחבילת urlfetch הבסיסית ישירות במקום ב-java.net, האפליקציה צריכה לציין doNotFollowRedirects.
שליחת בקשת HTTPS
כברירת מחדל, שירות אחזור של כתובות אתרים הבסיסי מאמת את האישור של המארח שאליו הוא מתחבר, ודוחה בקשות אם האישור לא תואם. אין צורך לאבטח את הבקשה באופן מפורש.
השבתת אימות של אישור מארח
כדי להשבית את האימות האוטומטי של אישור המארח ב-URL Fetch, צריך לשלוח בקשת HTTPS באמצעות המחלקה FetchOptions בחבילה urlfetch ולקרוא לשיטה doNotValidateCertificate().
שליחת בקשה אסינכרונית
כברירת מחדל, בקשות HTTP(S) הן סנכרוניות. כדי להנפיק בקשה אסינכרונית, האפליקציה צריכה להשתמש בשיטה fetchAsync() של URLFetchService. השיטה הזו מחזירה java.util.concurrent.Future<HTTPResponse>.
שליחת בקשה לאפליקציית App Engine אחרת
כשמשתמשים ב-URL Fetch כדי לשלוח בקשה לאפליקציית App Engine אחרת, האפליקציה יכולה לאמת את הזהות שלה על ידי הוספת הכותרת X-Appengine-Inbound-Appid לבקשה.
אם תנחו את שירות אחזור של כתובות אתרים לא לעקוב אחרי הפניות אוטומטיות, App Engine יוסיף את הכותרת הזו לבקשות באופן אוטומטי. הוראות להשבתת הפניות זמינות במאמר השבתת הפניות.
המאמרים הבאים
מידע על שירות אחזור של כתובות אתרים, כמו הכותרות שנשלחות בבקשת אחזור של כתובת URL בבקשות יוצאות.