API רחובות לפי שכונות\ שכונות לפי ערים
-
לאחר בדיקה נוספת ה-URL חסום לפניות שרת, רק קליינט יכול לגשת, כך שפתרון מלא אין כאן.
-
@yyy למה החלטת שזה חסום לבקשות שרת? אם זה נחסם מיד בבקשה הראשונה זה אומר שחסר לך הידרים
-
@יוסף-בן-שמעון
ממה שניסיתי פוסטמן ודפדפן עובד. הרצה מ-localhost לא עובד (סביבת אנגולר). ניסיתי להסיר בפוסטמן את ה-header של host וזה גם לא עבד כך שאולי זה קשור לזה.
אשמח להתבדות. -
@yyy כתב בAPI רחובות לפי שכונות\ שכונות לפי ערים:
@יוסף-בן-שמעון
ממה שניסיתי פוסטמן ודפדפן עובד. הרצה מ-localhost לא עובד (סביבת אנגולר). ניסיתי להסיר בפוסטמן את ה-header של host וזה גם לא עבד כך שאולי זה קשור לזה.
אשמח להתבדות.רק להדגיש בכל הסביבות וידאתי שאין שום שגיאה ב-URL ובסינטקס ורק הרספונס חוזר בעייתי.
-
@yyy כשהסרת את ההידר host זה לא עבד? אז כנראה זה ההידר שהוא מבקש, תנסה להוסיף אותו בבקשה מהשרת
-
@יוסף-בן-שמעון כתב בAPI רחובות לפי שכונות\ שכונות לפי ערים:
@yyy כשהסרת את ההידר host זה לא עבד? אז כנראה זה ההידר שהוא מבקש, תנסה להוסיף אותו בבקשה מהשרת
למיטב הבנתי אי אפשר.
-
@yyy לא הבנתי, אתה מדבר על בקשה מהקליינט או מהשרת?
אולי תעלה קטע קוד איך אתה שולח את הבקשה -
@yyy אולי יש כאן איזה קצר תקשורתי
אתה מנסה לשלוח מהדפדפן בקשה ל API, לשם כך אתה משתמש בקליינט של אנגולר HttpClient?
ומה השגיאה שחוזרת? -
@yyy כתב בAPI רחובות לפי שכונות\ שכונות לפי ערים:
חסום לפניות שרת, רק קליינט יכול לגשת
זה מילים חסרות משמעות.
אין דרך בעולם לדעת אם קליינט שלח או שרת.
נכון יותר לשאול למה לא עובד X מאשר לקבוע ש"זה המצב". -
@יוסף-בן-שמעון כתב בAPI רחובות לפי שכונות\ שכונות לפי ערים:
@yyy אולי יש כאן איזה קצר תקשורתי
אתה מנסה לשלוח מהדפדפן בקשה ל API, לשם כך אתה משתמש בקליינט של אנגולר HttpClient?
ומה השגיאה שחוזרת?זה הקוד האנגולרי:
getNeighborhoodsByCity(cityName: string, nStartWith = "-1"): Observable<any[]> { let tmpURL = this.neighborhoodsByCityURL; tmpURL = tmpURL.replace("MyCityName", cityName); if (nStartWith != "-1") { tmpURL = tmpURL.replace("startWithKey=-1", "startWithKey=" + nStartWith) } return this.http.get<any[]>(tmpURL); } (אני מתקשה להזיח כראוי, מקווה שנראה סביר)
האמת שאני כבר ממש לא מבין. לפעמים זה עובד ולפעמים לא, בלי שום חוקיות שמצאתי.
דוגמא:
כאשר הערכים שנשלחו בפרמטר של העיר הם
אבו קורינאת (שבט) --> תקין
ירושלים --> לא תקין
בית שמש --> תקין
בית שמש --> תקין
בית שמש --> תקין
ירושלים --> תקין
ירושלים --> לא תקין
ועוד כהנה וכהנה...השגיאה היא מסוג CORS, כפי שניתן לראות.
להלן צילום מסך חלקי של השגיאה: -
@yyy כתב בAPI רחובות לפי שכונות\ שכונות לפי ערים:
זה הקוד האנגולרי:
זה אכן לא יכול לעבוד מאנגולר כי זה צד לקוח וזה מביא לשגיאת CORS.
אתה צריך לבקש את התשובה מהשרת שלך, והוא זה שצריך לבצע את הבקשה (הוא לא ייחסם בcors כי הוא לא במסגרת דפדפן). -
@dovid כתב בAPI רחובות לפי שכונות\ שכונות לפי ערים:
זה אכן לא יכול לעבוד מאנגולר כי זה צד לקוח וזה מביא לשגיאת CORS.
כלומר מה שכתבת :
אין דרך בעולם לדעת אם קליינט שלח או שרת.
לכאורה אינו מדוייק, אמת?
@dovid כתב בAPI רחובות לפי שכונות\ שכונות לפי ערים:
@yyy אני כעת רואה שלפעמים זה עובד ולפעמים לא,
זה אכן משונה, אולי זה קשור לפרוקסי של אנגולר (שזה רלוונטי במצב dev בלבד, בפרודקשיין הכל מתחיל ונגמר בדפדפן ולכן תמיד יהיה CORS).כשאני שולח ישר מה-URL של הדפדפן זה תמיד עובד.
-
פוסט זה נמחק!
-
@dovid כתב בAPI רחובות לפי שכונות\ שכונות לפי ערים:
ה אכן משונה, אולי זה קשור לפרוקסי של אנגולר (שזה רלוונטי במצב dev בלבד, בפרודקשיין הכל מתחיל ונגמר בדפדפן ולכן תמיד יהיה CORS)
הבקשה הזו לא עוברת דרך הפרוקסי של אנגולר, כי זו פניה ישירה לדומיין חיצוני, הפרוקסי עובד רק בפניה לדומיין של הפיתוח
-
@yyy כתב בAPI רחובות לפי שכונות\ שכונות לפי ערים:
זה הקוד האנגולרי:
קח טיפ, עדיף לבנות את ה URL עם המחלקה המובנית בדפדפן, זה יותר אלגנטי ויותר קל לתחזוקה
const tmpUrl = new URL('https://www.nadlan.gov.il/Nadlan.REST/Main/GetNeighborhoodsListByCityAndStartsWith'); tmpUrl.searchParams.append('cityName', 'ירושלים'); console.log(tmpUrl.href) -
@yyy כתב בAPI רחובות לפי שכונות\ שכונות לפי ערים:
כאשר הערכים שנשלחו בפרמטר של העיר הם
אבו קורינאת (שבט) --> תקין
ירושלים --> לא תקין
בית שמש --> תקין
בית שמש --> תקין
בית שמש --> תקין
ירושלים --> תקין
ירושלים --> לא תקין
ועוד כהנה וכהנה...
השגיאה היא מסוג CORS, כפי שניתן לראות.באמת תמוה, נראה באג (ממשלה בכל זאת)
לפעמים נשלח ההידר Access-Control-Allow-Origin פעם אחת בלבד, לפעמים הוא נשלח פעמיים עם תכנים שונים והדפדפן לא יודע איך להתמודד עם זה -
@yyy כתב בAPI רחובות לפי שכונות\ שכונות לפי ערים:
כלומר מה שכתבת :
אין דרך בעולם לדעת אם קליינט שלח או שרת.
לכאורה אינו מדוייק, אמת?
כן מדוייק, כי חסימת CROS מתבצעת בדפדפן, השרת שמקבל את הבקשה לא יכול לדעת מי שולח הבקשה, הוא יכול להניח הנחוות על סמך הידרים, אבל אתה יכול לשים איזה הידרים שבא לך ולעבוד על השרת
-
@yyy כתב בAPI רחובות לפי שכונות\ שכונות לפי ערים:
כשאני שולח ישר מה-URL של הדפדפן זה תמיד עובד.
כי חסימת CROS מתרחשת רק בבקשות חוצות דומיינים, דהיינו כשאתה שולח בקשת AJAX מתוך אתר A לדומיין B, אם אתה פותח לשונית חדשה ומכניס את ה URL אין בעיה של CROS
-
למעשה הפיתרון הטוב ביותר להתמודד עם שגיונות הממשלה הוא כפי שהציע @dovid, להעביר את הבקשה דרך השרת
אתה שולח לשרת שלך את שם העיר, השרת שולח את הבקשה לשרת ה API, ומחזיר את התוצאות לקליינט
40/47