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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
dovidD

dovid

@dovid
ניהול
אודות
פוסטים
10.4k
נושאים
186
שיתופים
0
קבוצות
2
עוקבים
33
עוקב אחרי
0

פוסטים

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

  • התגוננות מהזרקת SQL
    dovidD dovid

    אפשר לבנות דינמי לחלוטין. בשביל הפרמטרים SqlParameter. בשביל שמות הטבלאות והעמודות וכו', אפשר פשוט לבדוק מול מילון שנטען מINFORMATION_SCHEMA. כמו"כ המתודה SqlCommandBuilder.QuoteIdentifier מבצעת ניקוי לסטרינג שמייצג זיהוי של DB כמו טבלה/עמודה.

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

    ארכיון code613m

  • התגוננות מהזרקת SQL
    dovidD dovid

    למה לא להשתמש בSqlParameter?

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

    ארכיון code613m

  • MVC להבין את האריטקטורה לעומק
    dovidD dovid

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

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

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

    ארכיון code613m

  • MVC להבין את האריטקטורה לעומק
    dovidD dovid

    יאהו כמה שאלות!!
    אז דבר ראשון, תבוא כל יום 🙂 לפעמים משעמם פה נורא.
    דבר שני רישא על ארכיטקטורה של MVC, וסיפא איך עושים א' וב' וג' שאינם קשורים ממש לMVC אלא השאלה מה נוהגים בMVC במקרים האלו 🙂

    אז דבר ראשון אני לא כ"כ מכיר MVC, אני די חדש שם.
    השאלה הראשונה זה תצוגות. זה ממש קל, פתח פרוייקט MVC חדש. פתח בVIEW את התיקיה Shared החלף את תוכן התוגה במבנה הדף. בפנים יש להשאיר בשביל התוכן את ההוראה @RenderBody().

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

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

    ארכיון code613m

  • חיפוש בpdf
    dovidD dovid

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

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

    ארכיון code613m

  • Visual Studio Code כבר מוציאה עדכון ראשון.
    dovidD dovid

    @avr416

    אבל אם כותב קובץ חדש דרכו - אז לא 😞
    מישו יודע למה?

    כי הוא לא יודע באיזה שפה אתה כותב. צור קובץ (או שמור את הקובץ שפות ע"י CTRL+S) ותן לו שם.
    הדרך המיטבית זה לפתוח תיקיה. אז יש לך אפשרות ליצור קובץ עם שם בסייר בצד (הלחצן העליון מבין הארבעה, ובפאנל שנפתח קליק ימני וnew file. תן לו שם עם סיומת למשל js עבור javascript).

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

    ארכיון code613m

  • Visual Studio Code כבר מוציאה עדכון ראשון.
    dovidD dovid

    @avr416

    בשביל מה זה נצרך? הרי היום גם הvisual studio הוא חינמי בגרסה מליאה (community)?
    או שזה בשביל לכתוב בשפות שאינם דוטנטיות?

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

    @avr416

    קיצר, שווה להוריד? יהיה לי תועלת בזה?

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

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

    ארכיון code613m

  • Visual Studio Code כבר מוציאה עדכון ראשון.
    dovidD dovid

    Visual Studio Code זה IDE מינימלסטי ויעיל, לכל שפה ועם תמיכה חזקה בשפות רבות ובפרט בJS (אכן C# וTypeScript הם הכי נתמכים). התוכנה החדשה שוחררה לראשונה לפני כחדוש במהלך אירוע הBuild של מקרוסופט, וכעת כבר מוציאה עדכון.

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

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

    ארכיון code613m

  • חדשות Google I/O 2015
    dovidD dovid

    סוף השבוע שעבר היה הכנס השנתי של גוגל הנקרא Google I/O.
    http://en.wikipedia.org/wiki/Google_I/O#2015_.28May_28-29.2C_2015.29

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

    ארכיון code613m

  • קצת הבהרה על המושג namespace
    dovidD dovid

    איי איי איי. לאט לאט עם שפע הבלבול.
    בC#, כצורה לסדר מחלקות בחרו בדרך של מרחבי שמות. איך זה עובד?
    אז קודם המשוגים האחרים שלא יתערבבו:
    assmbly - פרוייקטים, Reference. לא קשור בשום צומת לNamespace
    נניח אני חברה ואני כותב שפע מחלקות לטיפול בוידאו. הם נמצאים בכמה וכמה פרוייקטים - קרי: אסמבליים (יחידות קוד שבד"כ הם קבצי DLL). הקשר בין הפרוייקטים, כלומר אם פרוייקט ב' (נקרא לו: נצרך) צריך להשתמש בקוד מפרוייקט א' (נקרא לו: מספק), זה תלות אסמבליים: אסמבלי א' צריך את אסמבלי ב'. אז היכולת להשתמש באסמבלי אחד בקוד שכתוב באסמבלי אחר מבוצע ע"י Reference. הReference הוא פעולה שהDLL/פרוייקט הנצרך, מבצע בשביל לטעון את הDLL/פרוייקט המספק (פעולה זו היא חד צדדית, וא"א לבצעה גם לכיוון ההפוך).

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

    איך מגדירים
    namespace לא מגדירים בשום מקום מעבר למקום בו משתמשים בו, כלומר עוטפים בו קוד. namespace הוא גלובלי, ומה שייכתב בnamespace זה ה"הקדמה" הנחוצה לשימוש במחלקה (בתוך הNamespae עצמו פטורים מה"הקדמה"). אז אם יש לנו בפרוייקט א' מחלקה בשם ConvertToBinary ונעטוף אותה בNamespace ככה:

    namespace ProjectA
    {
        public class ConvertToBinary
        {
               ....
        }
    }
    

    אז בכל מקום אחר הפניה למחלקה תתבצע ע"י ProjectA.ConvertToBinary.
    זה גם מונע התנגשויות וגם מסדר את הקוד. כי אם מפתח רואה את המחלקה ConvertToBinary עם namespace מתאים אז הוא מבין באיזה תחום המחלקה מטפלת וכדומה.
    איך השם מורכב
    אפשר לבחור באיזה namespace שרוצים, ואפשר לכלול בשם הnamespace נקודות. וזה הופך את ההרגשה כלפיהם להיררכיה: System.Collections.Generic. ברמת המחשב זה פשוט שם ארוך שהרשו לכלול בו נקודות, אך למפתח זה נותן הסבר ברור על מטרתה של המחלקה והרקע למקרה בו היא נדרשת.
    איזה שם בוחרים
    אין כזה דבר namespace תפוס, ניתן להשתמש באותו namespace בפרויקטים שונים, ואף בחברות שונות (לכן אין מניעה שאתה תעטוף את המחלקה שלך בnamespace בשם System). רק שאז, אין מה שימנע מקרה ההתנגשות. בפרט אם ייתכן שבפרויקט אחד שתי המחלקות יבואו לשימוש. לכן מקובל תמיד שהרכיב הראשון בnamespace הוא שם החברה (גם מקרוסופט נוהגים ככה, רק שהמחלקות הפנימיות ב.net נחשבות לגלובליות ולא "שלהם"), ואח"כ התחום ובמקרה הצורך תת תחום וכו'.

    using - נטו קוסמטי, וברמת קובץ
    ללא המושג using, היינו צריכים לכתוב כל מחלקה בשמה המלא - עם ההקדמה של הnamespace. זה מאוד מייגע ולא קריא לפעמים.
    הusing בעצם אומר, במהלך הדף הנוכחי (קובץ), אני פטור מלכתוב את הקידומת XXX למחלקות ששוכנות שם.
    אם לולי הusing היינו כותבים

    System.Console.WriteLine("");
    

    אז אחרי שמוסיפים למעלה using System; די בכך:

    Console.WriteLine("");
    

    (אגב, את הConsole עדיין חייבים לכתוב, כי זה לא חלק מהnmaespace אלא שם המחלקה ממש שהWriteLine היא מתודה סטטית בתוכה. בC# 6 אפשר לייבא כמו namespace גם מחלקות סטטיות ואז אפשר לכתוב ישירות את שם המתודה בלבד. אבל 10 שנים חיו בלי זה מצויין :)).

    naemspace וintellisense - השלמה אוטומטית
    intellisense זה השם שמקרוסופט נתנו לכלי ההשלמה האוטומטית ברחבי הVisual Studio. הוא מנצל את עובדת סידור הקוד בnamespace לסינון ההצגה לפני המשתמש. במקום להציג כל מה ששייך, מוצג רק מה שזמין לרמה הנוכחית. כשמקישים נקודה אחרי שם namespace חלקי מקבלים את האפשרויות ההמשך ו/או מחלקות שנמצאים תחת השם הזה.

    לסיכום, חלוקת הקוד בC# על פני מחלקות, קבצים, אסמבליים ומרחבי שמות.
    מחלקות
    מחלקה תמיד נמצאת באסמבלי אחד ותחת namespace אחד. אך יכולה להתפרס על פני כמה קבצים ע"י partial.
    קבצים:
    יכולים להכיל 10 מחלקות (וכאמור מחלקה יכולה להתפרס על פני כמה קבצים), וגם כמה namespace בבלוקים נפרדים.
    כל קובץ נכנס כולו לאסמבלי אחד בלבד.
    using זה דרך קידוד שפעולת ברמת קובץ בודד וחוסכת הקלדה מלאה של הnamespac.
    אסמבלי:
    יכול להכיל הרבה קבצים, מחלקות, namespace. צריך להשתמש בReference כדי לפנות לאסמבלי אחר, אפי' שזה אותו שם של namespace.
    namespace:
    יכול "להתפרס" איך שרוצים. פעמיים באותו הקובץ ובאוו הפרויקט ובפרויקטים שונים (זה לא נכון באמת, כי namespace זה סה"כ שם ושימוש חוזר בו פשוט נותן את האפקט ה"חזותי" של partial).

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

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

    ארכיון code613m

  • מדריך WEB API
    dovidD dovid

    zviGood אתה מאוד משמח אותי בזה שאתה מתקדם לבד וכמובן גם על המחמאות :)...
    בקוד שלך הקטע של הStringBuilder מיותר, במקומו עליך לכתוב ככה:

    return Encoding.UTF8.GetString(value);
    

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

    public static string UnZip(byte[] value)
    {
        using (var ms = new System.IO.MemoryStream(value))
        using (var sr = new System.IO.Compression.GZipStream(ms, System.IO.Compression.CompressionMode.Decompress))
        using (var strReader = new StreamReader(sr, Encoding.UTF8))
            return strReader.ReadToEnd();
    }
    

    פורסם במקור בפורום CODE613 ב02/09/2015 17:20 (+03:00)

    ארכיון code613m

  • מדריך WEB API
    dovidD dovid

    @Zvi Good

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

    בקוד שלי אין בכלל שמירה לקובץ, רק השמה במשתנה טקסטואלי.

    @Zvi Good

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

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

    @Zvi Good

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

    איך פתחת אותו? בכל אופן בשביל לנתח HTML אתה חייב להשתמש בספריה חיצונית (או להתחיל לכתוב המון קוד).
    הספריה הטובה ביותר היא HtmlAgilityPack והדרך הקלה להתקנה היא ע"י הPackage Manager Console (תפריט Tools > NuGet Package Manager) שם אתה כותב Install-Package HtmlAgilityPack.

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

    ארכיון code613m

  • מדריך WEB API
    dovidD dovid

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

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

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

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

    ארכיון code613m

  • מדריך WEB API
    dovidD dovid

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

    ארכיון code613m

  • מדריך WEB API
    dovidD dovid

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

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

    ארכיון code613m

  • מדריך WEB API
    dovidD dovid

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

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

    ארכיון code613m

  • מדריך WEB API
    dovidD dovid

    כמו ש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)

    ארכיון code613m

  • מדריך WEB API
    dovidD dovid

    אתר שחושף 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)

    ארכיון code613m

  • הוספת מרחב שמות ע"י using
    dovidD dovid

    המשך ככה, אתה עושה פה סוף סוף מצב רוח...

    @avr416

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

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

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

    ארכיון code613m

  • הוספת מרחב שמות ע"י using
    dovidD dovid

    @avr416

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

    בהחלט.

    @avr416

    מה הכוונה להעלות אותו לכאן? את הקבצים שלו? את צילום המסך שלו?

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

    @avr416

    שאלה נוספת: מה ההבדל בין window לבין page בWPF? כלומר, מדוע להוסיף חלון חדש כדי להזין לתוכו מתפללים, ולא להוסיף עמוד חדש (ניסיתי להשתמש בpage ולא הצלחתי למצוא את הפקודה show שלו..)

    page זה עולם אחר. אין לזה show אלא משתמשים בדפדפן כמו frame להצגתו. גם לא מאתחלים אותו עם new אלא פשוט הframe עושה זאת. זה די מסובך לפנות לדף "מבחוץ" ובעצם הגישה של אפליקציה מבוססת דפים היא שהדפים הם עצמאיים לגמרי רק שהם חולקים בדרך כלל מקור נתונים סטטי/משותף.
    קצת סיפור, בעיקר בגלל שאני לא מכיר את זה טוב 🙂 :(.

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

    ארכיון code613m
  • 1
  • 2
  • 474
  • 475
  • 476
  • 477
  • 478
  • 518
  • 519
  • 476 / 519
  • התחברות

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

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