דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. מדריך WEB API

מדריך WEB API

מתוזמן נעוץ נעול הועבר ארכיון code613m
23 פוסטים 3 כותבים 2.0k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • Z מנותק
    Z מנותק
    zvi good
    כתב ב נערך לאחרונה על ידי
    #1

    שלום חברים אני עכשיו לומד בקורס dot net את הנושא של web, התרגיל הבא שלנו הוא להתממשק לאתר שקיים שם קבצי XML ולהציג את הנתונים שבתוכם.
    האתר שמשם אני אמור להוריד את ה XML לא נותן שום שרות ותשתית של התממשקות לקבצי XML שבתוכם

    אשמח אם אחד מהמומחים כאן יסכים לכתוב מדריך או להעלות קישור בעברית בנושא WEB API

    תודה רבה!

    פורסם במקור בפורום CODE613 ב01/06/2015 00:11 (+03:00)

    תגובה 1 תגובה אחרונה
    0
    • clickoneC מנותק
      clickoneC מנותק
      clickone
      כתב ב נערך לאחרונה על ידי
      #2

      אתה מתכוון לקבצי ASMX או ממש לכל התקשורת עם XML?
      ASMX זה ממש נהיה כמו פונקצייה מקומית אחרי שאתה מגדיר אותו, (כשמאחורה יש בקשות ותגובות בXML) והVS מנהל לך אותו (יצירת מחלקות, מימוש וכו'). - נקרא גם SOAP.
      אא"כ אתה רוצה ללמוד על מימוש של זה.

      WS אחרים שמשתמשים ממש בXML אז אתה מגיש בד"כPOST עם הXML שהם ביקשו ומקבל בחזרה XML או JSON לפי העניין.

      דוגמא לXML שקורא את הRSS שהוא בעצם XML של הפורום המדהים הזה <!-- s:-) --><img src="{SMILIES_PATH}/icon_e_smile.gif" alt=":-)" title="מחייך" /><!-- s:-) -->

      דוגמא לקבלת נתונים בJSON - מערכת צבע אדום של פיקוד העורף.
      שים לב שבדוגמאות האלו בעצם אתה לא מגיש כלום אלא רק מקבל. - אבל המימוש הוא אותו דבר.

      מקווה שעזרתי.

      פורסם במקור בפורום CODE613 ב01/06/2015 10:07 (+03:00)

      אין טסט כמו פרודקשן.

      המייל שלי urivpn@gmail.com

      תגובה 1 תגובה אחרונה
      0
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        כתב ב נערך לאחרונה על ידי dovid
        #3

        אתר שחושף XML, זה מקרה פשוט לגמרי. למשל בנק ישראל נותן את שערי המטבעות כתשובת XML פה http://boi.org.il/currency.xml. לגבי המונח ממשק ראה בסוף תשובתי.
        מה עושים עם הדף כמו של בנק ישראל? צריך להוריד את החומר, וזה שלב א', ולנתח אותו כXML וזה שלב ב'.
        אז במקום לחפש על web api אתה בשתי בעיות [u:1vpqirmd]ספציפיות[/u:1vpqirmd]:
        שלב א': C# download web page
        שלב ב': C# XML manipulation.

        אבל המחלקה הקלה ששמה XDocument בC# חוסכת את ההורדה מהאינטרנט, כי היא עושה זאת בעצמה ע"י המתודה Load.
        קוד מינימלי שמראה את רשימת המטבעות בבנק ישראל ושערי המטבעות:

        XDocument doc = XDocument.Load("http://boi.org.il/currency.xml");
        
        foreach (var item in doc.Root.Elements("CURRENCY"))
            Console.WriteLine("{0}, {1}: {2}", item.Element("NAME").Value, item.Element("COUNTRY").Value, item.Element("RATE").Value);
        

        תגיד לנו איזה נושא מעכב אותך ונעזור לך נקודתית.

        לגבי API:
        המושג "ממשק" הוא נקודות החיבור (השקה) של מערכת עם אנשים/מערכת/אובייקטים אחרים, להפעלה, או לחיווי.
        למשל, לאוטו יש הרבה מערכות (הנעה פליטה הילוכים תמסורת) ויש לו גם קצת יחסית ממשק לנהג (הגה מחוונים דוושות הנעה ועצירה) וגם ממשק לכלל העולם (פנסים והוינקרים - זה לא ממשק לנהג).
        למדפסת נורמלית היום למשל, הממשק כולל נורית אחת וכפתור אחד. זהו, זה הממשק של המדפסת (מלבד הממשק של המדפסת עם החומרה של המחשב).
        לתוכנית מחשב (למשל word או המערכת הפעלה עצמה) יש בד"כ ממשק ששמו "ממשק למשתמש" שבד"כ הוא ויזואלי או שורת פקודה. אך יש ממשק לתוכנות חיצוניות. כיון שתוכנות אינן מתפתחות מאליהן אז מקובל לקרוא לממשק זה "ממשק למפתחים" או בר"ת באנגלית API.
        לאתר אינטרנט (כמו גוגל או האתר הזה) יש ממשק למשתמש פשוט שזהו פלט HTML. מפתחים יכולים לכתוב קוד שייגש לHTML הזה כמו משתמש רגיל. אך הן מבחינת מפתח האתר והן מבחינת מפתח הרכיב הניגש לאתר, הקטע של הHTML מיותר לגמרי (במיוחד הCSS :)). אז לכן עושים באתר תשובות שמיועדות למפתחים בלבד - לא מחזירים HTML. למשל דף XML או JSON. ובד"כ גם הגישה אליהם היא לא דרך לינקים.

        פורסם במקור בפורום CODE613 ב01/06/2015 11:29 (+03:00)

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        תגובה 1 תגובה אחרונה
        3
        • Z מנותק
          Z מנותק
          zvi good
          כתב ב נערך לאחרונה על ידי
          #4

          @דוד ל.ט.

          למשל בנק ישראל נותן את שערי המטבעות כתשובת XML פה http://boi.org.il/currency.xml.

          תודה על הדוגמא זה עזר לי מאוד
          אבל במקרה שלי כדי שאוכל להוריד את הקובץ XML זה דורש ממני להזין שם משתמש ולעשות קליק על LOgin ורק אח"כ אפשרות להורדה.
          ואז השאלה איך אני מגדיר בקוד שיזין את שם המשתמש ויעשה קליק על Login

          תודה רבה על העזרה

          פורסם במקור בפורום CODE613 ב04/06/2015 01:50 (+03:00)

          תגובה 1 תגובה אחרונה
          0
          • clickoneC מנותק
            clickoneC מנותק
            clickone
            כתב ב נערך לאחרונה על ידי
            #5

            @Zvi Good

            @דוד ל.ט.

            למשל בנק ישראל נותן את שערי המטבעות כתשובת XML פה http://boi.org.il/currency.xml.

            תודה על הדוגמא זה עזר לי מאוד
            אבל במקרה שלי כדי שאוכל להוריד את הקובץ XML זה דורש ממני להזין שם משתמש ולעשות קליק על LOgin ורק אח"כ אפשרות להורדה.
            ואז השאלה איך אני מגדיר בקוד שיזין את שם המשתמש ויעשה קליק על Login

            תודה רבה על העזרה

            אני מבין ממך ש:

            1. אתה צריך לקרוא קובץ XML.
            2. הקובץ לא פתוח לקהל הרחב וצריך לוגין.
            3. אין ממשק לAPI וצריך ל"שחק" עם המערכת כאילו אתה גולש.

            הייתי עושה:

            1. מנתח בפידלר את הבקשה של הלוגין.
            2. מכניס את הבקשה בצורה תיכנותית בצורה של GET או POST. (תלוי במה שהצד שרת מאפשר)
            3. פונה לXML שאתה צריך.

            שים לב שאם אתה מייצר את הבקשה בWeb Client אתה צריך לשמור עלהקוקיז, כי אחרת הוא לא יזהה שעשית לוגין.
            ואולי יכול להיות שיהיה שווה לך יותר להשתמש באובייקט web browser ולדמות ממש גלישה. ככה האתר לא יודע שאתה רובוט.

            פורסם במקור בפורום CODE613 ב04/06/2015 10:02 (+03:00)

            אין טסט כמו פרודקשן.

            המייל שלי urivpn@gmail.com

            תגובה 1 תגובה אחרונה
            2
            • dovidD מנותק
              dovidD מנותק
              dovid ניהול
              כתב ב נערך לאחרונה על ידי
              #6

              כמו שClickOne מאר, רק אוסיף שאינך צריך פידלר בדרך כלל, כי רוב הLogin הם forms authentication, וזה ממש קל.
              אתה צריך לעשות קליק ימני על הטקסטבוקס של השם או של הסיסמה, ולראות ממה מורכב הform שעוטף אותם.
              המבנה של form של login בhtml הוא משהו בסגנון:

              <form action="xxxx" method="post">
                  <input type="text"  name="username">
                  <input type="password"  name="password">
                  <button type="submit">Log In</button>
              </form>
              

              ברור שבמקרה שלך זה יהיה שונה, אבל הפואנטה היא לראות מה name של האלמנטים, ומה כל אחד אמור להכיל.
              אחרי שאתה יודע מה אתה אמור להעביר לשרת, אתה צריך לתשאל את השרת ולקבל ממנו את הקוקיס. אח"כ לבקש את הדף להורדה (אחרי שבכותרת הבקשה מוכנס הקוקיס). יש כמה מחלקות ב.Net לעשות זאת. הנה דוגמה:

              //הכתובת צריכה להיות הכתובת של האקשן בטופס האינטרנט
              //אם הכתבות שם יחסית או ריקה אז זה זה בקמבון עם כתובת האתר/הדף הנוכחי
              var request = (HttpWebRequest)WebRequest.Create("actionUrl") ;
              request.Proxy = null;
              request.CookieContainer = new CookieContainer();
              request.Method = "POST";
              request.ContentType = "application/x-www-form-urlencoded";
              
              //העברת הפרמטרים וערכיהם
              byte[] requestData = Encoding.UTF8.GetBytes("username=" + "david" + "&password=" + "david15265");
              
              request.ContentLength = requestData.Length;
              
              using (Stream s = request.GetRequestStream())
                  s.Write(requestData, 0, requestData.Length);
              
              using (var response = (HttpWebResponse)request.GetResponse())
                  foreach (Cookie c in response.Cookies)
                      //פה תוכל לבדוק שאתה אכן עברת אימות בהצלחה
                      Console.WriteLine(c.Name + " = " + c.Value);
              
              //הורדת הקובץ
              var requestDown = WebRequest.Create("xml address url");
              ((HttpWebRequest) requestDown).CookieContainer = request.CookieContainer;
              
              string fileContent =new StreamReader(requestDown.GetResponse().GetResponseStream(), Encoding.Default).ReadToEnd();
              

              *בטפסים מסויימים (בנקים וכדומה) מופיע גם שדות נסתרים כמו טוקן אבטחה (שכדי ל"המציא" אותו אתה חייב לפני זה חתשאל את האתר בשאילתת get ולעמים להתחכם ולחקות JS מסויימים. במקרים כאלה הדרך הפשוטה (קצרה וארוכה 🙂 זה כמו שClickOne אמר להשתמש בWebBrowser).

              פורסם במקור בפורום CODE613 ב04/06/2015 11:38 (+03:00)

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              תגובה 1 תגובה אחרונה
              0
              • Z מנותק
                Z מנותק
                zvi good
                כתב ב נערך לאחרונה על ידי
                #7

                דבר ראשון תודה על העזרה
                @CklickOne

                אני מבין ממך ש:

                1. אתה צריך לקרוא קובץ XML.

                נכון מאוד, ואני מניח ש Json פועל אותו דבר.

                1. הקובץ לא פתוח לקהל הרחב וצריך לוגין.

                לא מדויק, זה כן פתוח לקהל הרחב אך הוא דורש להזין שם משתמש ו Login כך שלכאורה לא מפריע לו שזה יהיה רובוט.
                (כנראה שבעתיד הוא ירצה להגביל את השימוש למשתמשים עם סיסמא אז הוא הכין כבר את התבנית בצורה הזאת)

                1. אין ממשק לAPI וצריך ל"שחק" עם המערכת כאילו אתה גולש.

                נכון הרי זה מה שכתבתי בתחילת השאלה אך כנראה לא מי יודע מה ברור לכך יש כאן מי שיכון אותי :smile:
                @ZviGood

                האתר שמשם אני אמור להוריד את ה XML לא נותן שום שרות ותשתית של התממשקות לקבצי XML שבתוכם

                בדיוק זה העניין, אני מלא התפעלות מההבנה החדה אע"פ שלא הגדרתי את הבעיה שלי באופן ברור 🙂

                הייתי עושה:

                1. מנתח בפידלר את הבקשה של הלוגין.
                2. מכניס את הבקשה בצורה תיכנותית בצורה של GET או POST. (תלוי במה שהצד שרת מאפשר)
                3. פונה לXML שאתה צריך.

                המושג fiddler לא מוכר לי נעשה חיפוש בגוגל ונלמד על זה, אם תוכל להעשיר אותי בעניין אשמח מאוד

                שים לב שאם אתה מייצר את הבקשה בWeb Client אתה צריך לשמור על הקוקיס, כי אחרת הוא לא יזהה שעשית לוגין.
                ואולי יכול להיות שיהיה שווה לך יותר להשתמש באובייקט web browser ולדמות ממש גלישה. ככה האתר לא יודע שאתה רובוט.

                גם כאן הנושא של cookies לא נגעתי עדיין ראיתי את זה רק ברפרוף אשמח להעשרה, ואובייקט web client לא מוכר לי.
                אתה מבין מכך שאני רק מתחיל בתחום :smile:

                פורסם במקור בפורום CODE613 ב04/06/2015 12:00 (+03:00)

                תגובה 1 תגובה אחרונה
                0
                • Z מנותק
                  Z מנותק
                  zvi good
                  כתב ב נערך לאחרונה על ידי
                  #8

                  @דוד ל.ט.

                  כמו שClickOne מאר, רק אוסיף שאינך צריך פידלר בדרך כלל ...

                  כמו שכתבתי לעיל המושג פידלר אינו מוכר לי עדיין

                  *בטפסים מסויימים (בנקים וכדומה) מופיע גם שדות נסתרים כמו טוקן אבטחה (שכדי ל"המציא" אותו אתה חייב לפני זה לתשאל את האתר בשאילתת get ולעמים להתחכם ולחקות JS מסויימים. במקרים כאלה הדרך הפשוטה (קצרה וארוכה 🙂 זה כמו שClickOne אמר להשתמש בWebBrowser).

                  1. אני כרגע רוצה לראות שאני מצליח באתר פשוט ללא שדות נסתרים.
                  2. לא הבנתי מה הייתה כוונתך בתשאול האתר.

                  סליחה על הבורות אני ממש מתחיל בתחום וללא ידע באנגלית (כך שללמוד ולבקש עזרה בגוגל לא תמיד מניבה פירות)
                  אז ההתקדמות שלי קצת איטית... והפורום כאן הוא ממש הצלה בשבילי 🙂

                  פורסם במקור בפורום CODE613 ב04/06/2015 13:59 (+03:00)

                  תגובה 1 תגובה אחרונה
                  0
                  • dovidD מנותק
                    dovidD מנותק
                    dovid ניהול
                    כתב ב נערך לאחרונה על ידי
                    #9

                    אתה לא צריך להתנצל על כך שאתה לא יודע או לא מבין. הפורום בדיוק בשביל זה.
                    לא הבנתי כ"כ באיזה נקודה אתה עומד. תיכנס לאתר בו אתה מעוניין ובדוק היטב את מקור הדף. שים לב שהמקטע בו יש את התיבות של השם והסיסמה מוקף בתגיות form ונסה להתחקות אחרי השדות (רק תגיות input) המופיעים ביניהם. מה שמם, ומה הם אמורים להכיל/מכילים.
                    אחרי שיש לך את המידע הזה, אתה לוקח את הקוד שלי ומנסה לבצע בו התאמות. אשמח מאוד לעזור עוד.

                    פורסם במקור בפורום CODE613 ב04/06/2015 19:21 (+03:00)

                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                    תגובה 1 תגובה אחרונה
                    1
                    • Z מנותק
                      Z מנותק
                      zvi good
                      כתב ב נערך לאחרונה על ידי
                      #10

                      אחרי תקופה שלא התעסקתי עם הפרויקט אני חוזר לזה ועדיין אני תקוע

                      הפעם השתדל בעז"ה לפרט וגם להתמקד בבעיה
                      היעד של הפרויקט הוא אתר/אפליקציה להשוואת מחירי רשתות השיווק.
                      איך אני מתכוון להגיע לכך?
                      בתקופה האחרונה עבר חוק להגנת הצרכן - שקיפות מחירים החוק והתקנות מכוחו, מחייבים קמעונאי גדול לפרסם באתר אינטרנט את רשימת כל חנויותיו, את כל מוצרי המזון ומחיריהם הנמכרים בחנויות ומכלול המבצעים הקיימים בחנות.
                      ולאור זאת קיים באתר משרד הכלכלה קישורים לאתרים של רשתות השיווק הגדולות ששם מתפרסם כל הנ"ל
                      לצורך השוואת המחירים יש צורך להוריד מכל קמעונאי את קובץ המחירים ו... (אין סוף :smile: )
                      כל זה רקע כך שדברי יהיו מובנים...

                      אני בתחילת הפרויקט ואתמקד בבעיה שיש לי כרגע הגישה לקבצים דרך קוד חסומה היות ויש באתר טוקן שמשתנה
                      לדוגמא כשאני משתמש בקוד הזה באתר של אושר עד

                      <form id="login-user" action="https://url.publishedprices.co.il/login/user/" method="post">
                              <input type="text" name="username" value="osherad">
                              <input type="password" name="password">        
                          </form>
                          <script>
                              document.getElementById("login-user").submit();
                          </script>עולה לי הודעה 
                      

                      Unable to login user 'osherad' : Did not receive expected security token
                      כמובן שנתקלתי בבעיה גם כשניסיתי איכשהו להשתמש בקוד C# שעלה לעיל מאותה סיבה
                      (הבנתי שהוא מחפש קוקיס אך אני לא יודע איך לממש את זה)

                      אשמח אם מישהו כאן יוכל להעלות לי קוד שעוקף או מתגבר על הבעיה של הטוקן
                      אני מקווה שלא ביקשתי משהו מוגזם...
                      תודה רבה!

                      פורסם במקור בפורום CODE613 ב16/08/2015 16:12 (+03:00)

                      תגובה 1 תגובה אחרונה
                      0
                      • dovidD מנותק
                        dovidD מנותק
                        dovid ניהול
                        כתב ב נערך לאחרונה על ידי
                        #11

                        אתה חייב לבקש תחילה את הדף, ואחרי הורדתו להוציא ממנו את הטוקן שנמצא באינפוט נסתר שהID שלו הוא csrftoken.

                        פורסם במקור בפורום CODE613 ב16/08/2015 17:59 (+03:00)

                        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                        בכל נושא אפשר ליצור קשר dovid@tchumim.com

                        תגובה 1 תגובה אחרונה
                        1
                        • clickoneC מנותק
                          clickoneC מנותק
                          clickone
                          כתב ב נערך לאחרונה על ידי
                          #12

                          לצערי חסום לי בנטפרי.
                          וחלק בכלל מוציא לי שגיאת אבטחה

                          פורסם במקור בפורום CODE613 ב16/08/2015 21:00 (+03:00)

                          אין טסט כמו פרודקשן.

                          המייל שלי urivpn@gmail.com

                          תגובה 1 תגובה אחרונה
                          0
                          • clickoneC מנותק
                            clickoneC מנותק
                            clickone
                            כתב ב נערך לאחרונה על ידי
                            #13

                            ביקשתי בינתיים מחבר שיוריד לי.
                            זה בעצם קובץ שעולה עם כל עידכון?
                            ואז צריך לחלץ אותו ולהוציא את הXML?

                            אצל כל הרשתות זה כך? או שיש רשתות שאצלם המחיר מסודר בצורה שונה.

                            פורסם במקור בפורום CODE613 ב16/08/2015 21:03 (+03:00)

                            אין טסט כמו פרודקשן.

                            המייל שלי urivpn@gmail.com

                            תגובה 1 תגובה אחרונה
                            0
                            • clickoneC מנותק
                              clickoneC מנותק
                              clickone
                              כתב ב נערך לאחרונה על ידי
                              #14

                              תגיד, איך הזחלן (=תוכנה לכריית נתונים) שלך בנוי?

                              כפונקצייה שרצה? או חלון שיש לך שליטה עליו?

                              פורסם במקור בפורום CODE613 ב16/08/2015 21:12 (+03:00)

                              אין טסט כמו פרודקשן.

                              המייל שלי urivpn@gmail.com

                              תגובה 1 תגובה אחרונה
                              0
                              • Z מנותק
                                Z מנותק
                                zvi good
                                כתב ב נערך לאחרונה על ידי
                                #15

                                @ClickOne

                                ביקשתי בינתיים מחבר שיוריד לי.
                                זה בעצם קובץ שעולה עם כל עידכון?
                                ואז צריך לחלץ אותו ולהוציא את הXML?

                                כן כל פרק זמן יש עידכון (לפי החוק הם חייבים לעדכן באתר שעה מעדכון המחירים בפועל)
                                @ClickOne

                                אצל כל הרשתות זה כך? או שיש רשתות שאצלם המחיר מסודר בצורה שונה.

                                כל רשתות השיווק מספקים את הנתונים ב XML בקובץ RAR (וחלקם גם ב Excel ואולי עוד משהו)
                                כך שהכי נוח יהיה לעבוד מול ה XML (אולי להמיר אותו ל Json)
                                יש תקן איך חייבים לפרסם את תבנית הנתונים לפי הבדיקה זה לא מיושם במאה אחוז

                                @ClickOne

                                תגיד, איך הזחלן (=תוכנה לכריית נתונים) שלך בנוי?
                                כפונקצייה שרצה? או חלון שיש לך שליטה עליו?

                                עדיין שום דבר לא בנוי כמו שכתבתי למעלה אני עדיין עומד בשלב של לעקוף את הטוקן בדף הלוגין.
                                (על אף שאין קשר בין זה להמשך הקוד)

                                ולשאלתך בכוונתי לבנות אותו כפונקציה שרצה כל פרק זמן לפי הצורך כדלהלן
                                הנתונים מתעדכנים בצורה הזאת:
                                (בבוקר) עולה קובץ מעודכן מלא של מחירים FullPrice וכן קובץ מבצעים FullPromo
                                ובהמשך הים כשהם מעדכנים מחירים הם מוסיפים (לא משנים ולא מוחקים) קובץ עדכון גם באתר.
                                ובגלל שהנתונים מתעדכנים מדי פעם (שעה מהעדכון בפועל) ואי אפשר לצפות את מועד העדכון
                                אז הפתרון הוא לבדוק כל שעה או שעתיים אם נוסף קובץ עדכון

                                פורסם במקור בפורום CODE613 ב16/08/2015 23:54 (+03:00)

                                תגובה 1 תגובה אחרונה
                                0
                                • Z מנותק
                                  Z מנותק
                                  zvi good
                                  כתב ב נערך לאחרונה על ידי
                                  #16

                                  @דוד ל.ט.

                                  אתה חייב לבקש תחילה את הדף, ואחרי הורדתו להוציא ממנו את הטוקן שנמצא באינפוט נסתר שהID שלו הוא csrftoken.

                                  אוקי את זה הבנתי
                                  אם אני גולש לדף ומעתיק את הטוקן ומבלי לסגור את הדף מריץ את הקוד הזה זה נותן לי להמשיך הלאה
                                  אבל אם אני מרענן או סוגר את הדף הטוקן משתנה

                                  <form id="login-user" action="https://url.publishedprices.co.il/login/user/" method="post">
                                          <input type="text" name="username" value="osherad">
                                          <input type="password" name="password">        
                                            כאן העתקתי את הטוקן והרצתי תוך כדי גלישה
                                          <input type="hidden" name="csrftoken" id="csrftoken" value="CcKww60Cwp/Dj8KQHG3DqUpuwqktRsORw5XDkMO/GQ==" />
                                  
                                      </form>
                                      <script>
                                          document.getElementById("login-user").submit();
                                      </script>
                                  

                                  איך אני יכול ליישם את זה ב C# מבלי שאצטרך לגלוש כל פעם?
                                  אני הרי רוצה שהתוכנה תרוץ בעצמה מדי פעם לפי הגדרה מראש בצורה אוטומטית.

                                  שמעתי על כלי בשם selenium שקשור לבדיקות אוטומטיות שדרכה באימולטור אפשר להריץ את האתר להוריד את הקבצים
                                  ואז לטפל בהם
                                  אבל זה ממש לא נראה לי דרך טבעית
                                  או שכן ???

                                  פורסם במקור בפורום CODE613 ב17/08/2015 00:15 (+03:00)

                                  תגובה 1 תגובה אחרונה
                                  0
                                  • dovidD מנותק
                                    dovidD מנותק
                                    dovid ניהול
                                    כתב ב נערך לאחרונה על ידי
                                    #17

                                    אם אתה מרענן את הדף זה לא משתנה כי זה אותו עוגיה. זה משתנה בדף חדש או אחרי שהעוגיה לא תקפה.
                                    אתה צריך לגשת לדף דרך הקוד ושם להוציא את הטוקן. ועם העוגיה שאתה מחזיק לבצע login ואח"כ להוריד את הקובץ.
                                    הכנתי לך דוגמה לאושר עד:
                                    ישנם שלוש מתודות עזר (getToken, login, StringFileDownload) והמתודה הרביעית (Download) עושה את העבודה.

                                    string getToken(CookieContainer cookieContainer, string urlPage, string pattrenRegex)
                                    {
                                        var WebRequestForGetToken = WebRequest.Create(urlPage);
                                        ((HttpWebRequest)WebRequestForGetToken).CookieContainer = cookieContainer;
                                    
                                        string pageForToken = new StreamReader(WebRequestForGetToken.GetResponse().GetResponseStream(), Encoding.Default).ReadToEnd();
                                    
                                        return Regex.Match(pageForToken, pattrenRegex).Groups[1].Value;
                                    }
                                    
                                    void login(CookieContainer cookieContainer, string urlPage, string args)
                                    {
                                        var request = (HttpWebRequest)WebRequest.Create(urlPage);
                                        request.Proxy = null;
                                        request.CookieContainer = cookieContainer;
                                        request.Method = "POST";
                                        request.ContentType = "application/x-www-form-urlencoded";
                                    
                                        byte[] requestData = Encoding.UTF8.GetBytes(args);
                                        request.ContentLength = requestData.Length;
                                    
                                        using (Stream s = request.GetRequestStream())
                                            s.Write(requestData, 0, requestData.Length);
                                    
                                        using (var response = (HttpWebResponse)request.GetResponse())
                                            foreach (Cookie c in response.Cookies)
                                                //פה תוכל לבדוק שאתה אכן עברת אימות בהצלחה
                                                Console.WriteLine(c.Name + " = " + c.Value);
                                    }
                                    
                                    string StringFileDownload(CookieContainer cookieContainer, string urlFile)
                                    {
                                        var requestDown = WebRequest.Create(urlFile);
                                        ((HttpWebRequest)requestDown).CookieContainer = cookieContainer;
                                    
                                        return new StreamReader(requestDown.GetResponse().GetResponseStream(), Encoding.Default).ReadToEnd();
                                    }
                                    
                                    void Download()
                                    {
                                        //מחזיק לעוגיות
                                        CookieContainer cookieContainer = new CookieContainer();
                                    
                                        //משיכת הטוקן
                                        //מוריד בעצם את הדף ומחפש את הערך באמצעות ביטוי רגלורי
                                        string pattrenRegex = "\"csrftoken\" value=\"(.*)\"";
                                        string token = getToken(cookieContainer, "https://url.publishedprices.co.il/login", pattrenRegex);
                                    
                                        //בניית הפרמטרים: שם סיסמה וטוקן במקרה זה
                                        var args = "username=" + "osherad&password=&csrftoken=" + HttpUtility.UrlEncode(token);
                                    
                                        //מבצע login עם אותם עוגיות של 
                                        login(cookieContainer, "https://url.publishedprices.co.il/login/user", args);
                                    
                                        //מוריד את הקובץ
                                        string file = StringFileDownload(cookieContainer, "https://url.publishedprices.co.il/file/d/Price7290103152017-001-201508171000.gz");
                                    }
                                    

                                    פורסם במקור בפורום CODE613 ב17/08/2015 13:55 (+03:00)

                                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                    תגובה 1 תגובה אחרונה
                                    3
                                    • Z מנותק
                                      Z מנותק
                                      zvi good
                                      כתב ב נערך לאחרונה על ידי
                                      #18

                                      [size=150:2b85nnem]תודה ענקית[/size:2b85nnem] דוד על השקעתך בשבילי (חבל שאין לייק)

                                      העתקתי את הקוד לפרויקט קונסול והוספתי את מרחבי השמות הדרושים
                                      אך הוא מראה לי שגיאה בשורה 50 על HttpUtility הוא טוען שהוא לא מכיר את השם הזה
                                      The name 'HttpUtility' does not exist in the current context

                                      דבר נוסף האם אני מבין נכון שאני מתחיל להריץ את הקוד בפונקציית Download?
                                      פשוט הפונקציות האחרות מקבלות פרמטרים שנמצאים בתוכו.

                                      פורסם במקור בפורום CODE613 ב17/08/2015 15:46 (+03:00)

                                      תגובה 1 תגובה אחרונה
                                      1
                                      • dovidD מנותק
                                        dovidD מנותק
                                        dovid ניהול
                                        כתב ב נערך לאחרונה על ידי
                                        #19

                                        תוסיף Reference בשם System.Web.

                                        הפונקציה הראשית היא אכן Download. חילקתי לפונקציות כדי למנוע קוד כפול לכתובות אחרות.
                                        האמת שאתה יכול לעשות זאת יותר אוטומטית וגנרית - בלי לדעת אם יש טוקנים ומה שמם - פשוט לחפש את הטוקנים ע"י בדיקה אם יש בטופס אינפוטים נסתרים וא"כ לקחת את ערכם. אבל כיון שזה כולל ניתוח html וזה מצריך עבודה/מחלקה נמנעתי מלרדת לכזו רזולוציה.

                                        בConsole אז אתה צריך או להפוך את כל הפונקציות לסטטיות או ליצור אובייקט כמו var p = new Programm, ואח"כ p.Download().

                                        פורסם במקור בפורום CODE613 ב17/08/2015 15:56 (+03:00)

                                        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                        בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                        תגובה 1 תגובה אחרונה
                                        2
                                        • Z מנותק
                                          Z מנותק
                                          zvi good
                                          כתב ב נערך לאחרונה על ידי
                                          #20

                                          @דוד ל.ט.

                                          אתה צריך לגשת לדף דרך הקוד ושם להוציא את הטוקן. ועם העוגיה שאתה מחזיק לבצע login ואח"כ להוריד את הקובץ.
                                          הכנתי לך דוגמה לאושר עד:
                                          ישנם שלוש מתודות עזר (getToken, login, StringFileDownload) והמתודה הרביעית (Download) עושה את העבודה.

                                          הרצתי את הפרויקט זה מתקמפל ורץ אבל קובץ אני לא רואה שהוא מוריד
                                          הוא מביא לי את שם הקובץ ועוד כמות של תוים מכל הבא ליד...
                                          מדוע?
                                          אולי בגלל שזה קובץ gz דחוס אז כך הוא מוריד את זה
                                          אולי הקידוד אינו מוגדר בצורה נכונה
                                          יש לי קוד לחילוץ קבצי gz אבל זה לא יעזור לי כי זה רק לקבצים פיזיים.
                                          ואולי יש אפשרות להוריד ולחלץ בלי לשמור אותו פיזית?!.

                                          עוד משהו בקשר לקוד הזה

                                          string file = StringFileDownload(cookieContainer, "https://url.publishedprices.co.il/file/d/Price7290103152017-001-201508171000.gz");
                                          
                                          string StringFileDownload(CookieContainer cookieContainer, string urlFile)
                                          {
                                              var requestDown = WebRequest.Create(urlFile);
                                              ((HttpWebRequest)requestDown).CookieContainer = cookieContainer;
                                           
                                              return new StreamReader(requestDown.GetResponse().GetResponseStream(), Encoding.Default).ReadToEnd();
                                          }
                                          

                                          ה Url כאן מפנה לקובץ מסוים להורדה ואני מעוניין לקבל את הדף ולעבור עם לולאה על כל תגיות ה Href שמכילים קבצים להורדה
                                          אז שיניתי את ה-Url כך שיגיע לדף שאוכל למפות אותו https://url.publishedprices.co.il/file מה שלכאורה היה אמור להביא לי את כל מקור הדף
                                          אבל אופס' אני מגלה שהוא מביא לי את הדף חוץ ממה שאני צריך אין שם קישורים להורדה בכלל
                                          ועוד יותר מוזר היה לי כשפתחתי את האתר בדף שנמצאים שם הקישורים וביקשתי את מקור הדף אני מקבל את מקור הדף בלי הקישורים להורדה
                                          למה זה כך? :shock:

                                          פורסם במקור בפורום CODE613 ב18/08/2015 15:07 (+03:00)

                                          תגובה 1 תגובה אחרונה
                                          0

                                          • 1
                                          • 2
                                          בא תתחבר לדף היומי!
                                          • התחברות

                                          • אין לך חשבון עדיין? הרשמה

                                          • התחברו או הירשמו כדי לחפש.
                                          • פוסט ראשון
                                            פוסט אחרון
                                          0
                                          • דף הבית
                                          • קטגוריות
                                          • פוסטים אחרונים
                                          • משתמשים
                                          • חיפוש
                                          • חוקי הפורום