none
הפעלת אירוע בדף aspx ע"י HttpWebRequest RRS feed

  • שאלה

  • שלום לכולם,

    אני מנסה לקרוא לדף aspx ע"י HttpWebRequest ולהריץ עליו submit (שילך לאחד האירועים שלו)

    קודם קראתי לו עם האירוע, אבל הוא לא החזיר כלום, לדעתי, כי לא שלחתי לו viewstate, אח"כ שרשרתי את הviewstate ממה שחזר בפעם הראשונה, ובשורה: 

    response = (HttpWebResponse)request.GetResponse();

    חוזר לי 404.

    אשמח אם משהו יסביר לי מה הבעיה שלי.

    תודה!!!

    שרה.

    var request = (HttpWebRequest)WebRequest.Create("My url");
                    request.Method = WebRequestMethods.Http.Post;
                    request.ContentType = "application/x-www-form-urlencoded";
                    using (var stream = request.GetRequestStream())
                    {
                        var buffer = Encoding.UTF8.GetBytes("ctl00$CPHCenter$txtCompanyNumber=512314394&ctl00$CPHCenter$btnSearch=חפש");
                        stream.Write(buffer, 0, buffer.Length);
                    }
                    var response = (HttpWebResponse)request.GetResponse();
                    string result = String.Empty;
                    using (var reader = new StreamReader(response.GetResponseStream()))
                    {
                        result = reader.ReadToEnd();
                    }
                    Console.WriteLine(result);
    
                    string viewState = ExtractViewState(result);
                    string postData =
                          String.Format(
                             "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE={0}&ctl00%24CPHCenter%24txtCompanyName=ctl00$CPHCenter$txtCompanyNumber=512314394&ctl00$CPHCenter$btnSearch=חפש&ctl00%24CPHCenter%24GovCaptchaControl1=&ctl00%24CPHCenter%24hidDivCapcha=",
                             viewState
                          );
    
    
    
                    request = (HttpWebRequest)WebRequest.Create("My url");
                    request.Method = WebRequestMethods.Http.Post;
                    request.ContentType = "application/x-www-form-urlencoded";
                    StreamWriter requestWriter = new StreamWriter(request.GetRequestStream());
                    requestWriter.Write(postData);
                    requestWriter.Close();
                    response = (HttpWebResponse)request.GetResponse();
                    result = String.Empty;
                    using (var reader = new StreamReader(response.GetResponseStream()))
                    {
                        result = reader.ReadToEnd();
                    }
                    Console.WriteLine(result);

    יום רביעי 07 ינואר 2015 18:35

תשובות

  • הייתי מציע לך ללכת בכיוון אחר

    עדיף להגדיר דף חדש ללא מגבלות של ViewState ושאר ולידציות ולעבוד מולו 

    או אפילו טוב יותר ליצור HTTP Service שיעשה את אותה עבודה ללא המגבלות של ASP.NET. ניתן להשתמש ב-WCF או ASP.NET WEB API על מנת לבנות Service שכזה

    האם יש לך יכולת לעדכן את השרת? איזה גרסא של ASP.NET את מריצה ושל .NET Framework ?

    • סומן כתשובה על-ידי Eran Sharvit יום רביעי 14 ינואר 2015 08:58
    יום חמישי 08 ינואר 2015 12:02

כל התגובות

  • בקרוב מומחי הקהילה ינסו לסייע.

    תודה.


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

    יום חמישי 08 ינואר 2015 11:35
  • הייתי מציע לך ללכת בכיוון אחר

    עדיף להגדיר דף חדש ללא מגבלות של ViewState ושאר ולידציות ולעבוד מולו 

    או אפילו טוב יותר ליצור HTTP Service שיעשה את אותה עבודה ללא המגבלות של ASP.NET. ניתן להשתמש ב-WCF או ASP.NET WEB API על מנת לבנות Service שכזה

    האם יש לך יכולת לעדכן את השרת? איזה גרסא של ASP.NET את מריצה ושל .NET Framework ?

    • סומן כתשובה על-ידי Eran Sharvit יום רביעי 14 ינואר 2015 08:58
    יום חמישי 08 ינואר 2015 12:02
  • תודה על התגובה!!!

    הבעיה היא שזה לא דף שלי, זה דף באתר חיצוני, אני רוצה לבדוק פרטים דרך הserver דרך האתר שלי.

    הכתובת לדף היא:

    http://havarot.justice.gov.il/CompaniesList.aspx

    ואני רוצה למלא שם את מס' התאגיד ולדמות click על הכפתור שם.

    יום חמישי 08 ינואר 2015 12:24
  • בוקר טוב,

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

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

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

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

    1. את שוכחת את מסלול החיים של webform application.

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

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

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

    אצלך נראה שהנתון של ה __VIEWSTATE אינו מקודד ואם כך אז החיים יותר קלים.

    חשוב מאוד להבין את ההבדל בין נתונים שעוברים דרך ה __VIEWSTATE ונתונים שעוברים כמו ב HTML רגיל. גם ה __VIEWSTATE הוא HTML רגיל אבל הוא נתון אחד שמכיל מספר רב של נתונים ביחד.



    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]



    יום שישי 09 ינואר 2015 07:42
    מנחה דיון
  • הי.

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

    בעיקרון זה יכול להיות חוקי וזה יכול להיות לא חוקי - הכל בהתאם לתנאי השימוש באתר כפי שבעל האתר פרסם. הבעיה מתחילה בכך שהרבה אתרים לא מפרסמים תנאי שימוש או מפרסמים תנאי שימוש לא ברורים ואז זה מתחיל להיות מורכב.

    בקיצור - אם אתה הולך לעשות אפליקציה מסחרית או אפליקציה שמבזבזת הרבה משאבי שרת לאתר מסויים - מאד מומלץ להתייעץ עם עורך דין המתמחה בנושא לבדוק את נושא החוקיות.

    תודה.


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

    יום שני 12 ינואר 2015 09:14
  • אם מסתכלים בurl שכתבתי אפשר להבין שזה לא אתר שנלקחים ממנו רווחים כשקוראים לו. 

    בכל אופן אני בודקת את הנושא.

    תודה!

    שרה.

    יום שני 12 ינואר 2015 09:38
  • גם אתר ללא מטרות רווח, בדרך כלל רוצה שתצפי באתר ולא תעשי שימוש בשירות שלו בצורה נסתרת! רוב האתרים הממשלתיים או של ארגונים ללא מטרות רווח, מבוססים על שירות חיצוני שהם מקבלים (למשל חברה שמפתחת להם את האתר ובהתאם להסכם השירות, מכניסה שורת "האתר פותח על ידי..." או משהו דומה), או שהם נעזרים בפרסומות כדי לממן פעילות ועוד. השירות ניתן כפי שהוא לעבודה באתר ולא לעבודה נסתרת מאחורי הקלעים, אלא אם נרשם אחרת. ברירת המחודל חייבת להיות, שמדובר בפעולה אסורה לחלוטין.

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

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

    ** מה שאת צריכה זה לקבל את אישור האתר ממנו את רוצה לקבל את השירות (בדרך כלל אתרים שרוצים לתת את השירות כבר מחזיקים מערכת API מתאימה, ואחרים כניראה לא רוצים בכך).


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]


    יום שני 12 ינואר 2015 11:56
    מנחה דיון
  • לא הייתי ממהר להגיד שמדובר בפעולה עבריינית, אבל אכן הנושא מורכב מבחינה משפטית.

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

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


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]

    יום שני 12 ינואר 2015 12:11
    מנחה דיון
  • כיוון שלא אני ולא אתה עורכי דין המתמחים בנושא קניין רוחני באינטרנט, אני מציע לא לקבוע דברים שמתבססים על השערות אלא להתבסס על עובדות מוכחות בלבד.

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

    תודה.


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

    יום שלישי 13 ינואר 2015 11:04
  • בעקרון אתה צודק ערן, ולכן אני נעזר במילים כמו "לדעתי ולהבנתי" ולא קובע את הנקודה כעובדה, אם כי יש לי דיי הרבה נסיון בניהול עסק בדיוק בתחום הזה של פיתוח WEB, ומספר הבקשות לביצוע עבודות דומות זה לא משהו שחדש לי. אני מניח שעם הזמן סירבתי לבצע מאות עבודות מסיבות דומות: חוקיות או אתיות/מוסריות (כפי שכתבתי מעל זה חלק מהנושא בעיני), וגם עברתי את הדיונים עם עורכי הדין או היועצים התחום המשפטי, בנושאים אלו או בנושאים קרובים לכך :-),  כדי להיות מספיק בטוח בעצמי להביע דעה מוצקה (אם כי אני מדגיש שוב שזו רק דעה לפי הבנתי ונסיוני והאתיות האישית).

    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]


    יום שלישי 13 ינואר 2015 15:45
    מנחה דיון
  • על מנת לסגור את השרשור בסיום אני מציע לסמן את התשובה של אורי, למרות שהיא לא נותנת את הפתרון שאת מחפשת היא עונה על השאלה המקורית, אלא אם נצליח להגיע לךפתרון שיותר מתאים לך שרה.

    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]

    יום שלישי 13 ינואר 2015 22:36
    מנחה דיון
  • תודה על כל התגובות!!!

    אני לא רואה שזה משהו אפשרי, כי כשאני נכנסת לדף בGET ולא בPOST כמו שהצעת לי זה לא מביא את התוכן המקורי, וכתוב שם:

    "JavaScript must be enabled in order to view this page."

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

    יום רביעי 14 ינואר 2015 06:42
  • בוקר טוב שרה,

    אני מבקש לעצור את הדיון בנושא ספציפי זה, כרגע בשל החשש לשימוש לא אתי/מוסרי או לצרכים לא חוקיים, עד שתבררי את הנושא לעומק.
    אני לא מוכן שפורום שבו אני מנהל ייקח חלק בעזרה בפעולות לא אתיות ועל אחת כמה וכמה אם הן לא חוקיות!

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


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]

    יום רביעי 14 ינואר 2015 08:47
    מנחה דיון
  • בסדר, אני מבינה אותך.

    תודה בכל אופן על העזרה, אברר את הנושא ואפעל בהתאם.

    יום רביעי 14 ינואר 2015 08:54